Linuxでアセンブリ言語を使用し、mallocや友人ではなく、システムコールを使用した、動的メモリ割り当ての優れたコード例を探しています。
これを行うための最も簡単で効果的な方法のいくつかは何ですか?
Intel386以降のコンピュータ。
Linuxでアセンブリ言語を使用し、mallocや友人ではなく、システムコールを使用した、動的メモリ割り当ての優れたコード例を探しています。
これを行うための最も簡単で効果的な方法のいくつかは何ですか?
Intel386以降のコンピュータ。
Linuxではmmap2
、これを低レベルで使用するための賢明なシステムコールです。6つの引数を取るので、IA32では次を使用して呼び出すことができます。
mov eax, 192 ; mmap2
xor ebx, ebx ; addr = NULL
mov ecx, 4096 ; len = 4096
mov edx, $7 ; prot = PROT_READ|PROT_WRITE|PROT_EXEC
mov esi, $22 ; flags = MAP_PRIVATE|MAP_ANONYMOUS
mov edi, -1 ; fd = -1
xor ebp, ebp ; offset = 0 (4096*0)
int $80 ; make call
(パラメーターの受け渡しの詳細については、関連するカーネルソースを参照してください)
私はこれをNASMで構築しstrace
、を使用して機能することを確認しました。
mmap2(NULL, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xf77ae000
の代わりに、brk()
を使用してmmap()
システムコールを使用することもできますMAP_ANONYMOUS | MAP_PRIVATE
。
brkシステムコールを使用して、データセグメントの終わりを変更します。
http://www.linuxjournal.com/article/6390を見て、何をしているのかを理解してください。