0

ptr と mmap の引数を取り、それに応じて設定するマクロを作成しようとしています。これは私がこれまでに持っているものです:

#define MY_MMAP(PTR, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6) \
({              \
int x = 90; \
asm  (          \
    "movl %1, %%eax \n"     \
    "movl %2, %%ebx \n" \
    "movl %3, %%ecx \n" \
    "movl %4, %%edx \n" \
    "movl %5, %%esi \n" \
    "movl %6, %%edi \n" \
    "movl %7, %%ebp \n" \
    "int $0x80 \n"          \
    "movl %%eax, %0"      \
    :"=r" (PTR)     \
    : "eax" (x) ,"ebx" (ARG1), "ecx" (ARG2), "edx" (ARG3), "esi" (ARG4), "edi" (ARG5), "ebp" (ARG6) \
    :           \
    );          \
})

ただし、このコードを使用すると機能しません。誰かが私を助けることができますか?

  char * readBuffer;
  MY_MMAP(readBuffer, 0, (sizeOfRead + 1),  PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1 ,0);

gcc で作成したアセンブリ コードは次のとおりです。

 movl %eax, %eax 
 movl $0, %ebx 
 movl %ecx, %ecx 
 movl $3, %edx 
 movl $34, %esi 
 movl $-1, %edi 
 movl $0, %ebp 
 int $0x80 
 mov %eax, %ebx
4

1 に答える 1

0

システムコールへの引数としてポインタを渡します。int0x80を実行する前に、eaxのmmapssyscall番号である必要があります。

于 2013-02-10T01:24:57.533 に答える