linux - 예제 - 시스템 콜 함수 종류




Linux에서 어셈블리 및 시스템 호출을 사용하여 메모리를 동적으로 할당하는 방법 (3)

Linux에서 어셈블리 언어를 사용하고 malloc 및 친구가 아닌 시스템 호출을 사용하여 동적 메모리 할당에 대한 좋은 코드 예제를 찾고 있습니다.

이 작업을 수행하는 가장 단순하지만 효과적인 방법은 무엇입니까?

Intel 386+ 컴퓨터에서.




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




dynamic-memory-allocation