30

Linuxでアセンブリ言語を使用し、mallocや友人ではなく、システムコールを使用した、動的メモリ割り当ての優れたコード例を探しています。

これを行うための最も簡単で効果的な方法のいくつかは何ですか?

Intel386以降のコンピュータ。

4

4 に答える 4

14

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
于 2012-12-12T22:57:33.900 に答える
9

brk(2)。そしてELFを見てください。

于 2010-05-06T14:58:39.827 に答える
4

の代わりに、brk()を使用してmmap()システムコールを使用することもできますMAP_ANONYMOUS | MAP_PRIVATE

于 2010-05-07T06:10:08.227 に答える
3

brkシステムコールを使用して、データセグメントの終わりを変更します。

http://www.linuxjournal.com/article/6390を見て、何をしているのかを理解してください。

于 2010-05-06T14:57:07.440 に答える