在GCC内联汇编中进行syscall

是否可以从内联汇编块中使用syscall编写单个字符?如果是这样,怎么办?它应该看起来像“东西”:

__asm__ __volatile__

(

" movl $1, %%edx \n\t"

" movl $80, %%ecx \n\t"

" movl $0, %%ebx \n\t"

" movl $4, %%eax \n\t"

" int $0x80 \n\t"

::: "%eax", "%ebx", "%ecx", "%edx"

);

$ 80是ascii中的“ P”,但是什么也不会返回。

任何建议,不胜感激!

回答:

就像是

char p = 'P';

int main()

{

__asm__ __volatile__

(

" movl $1, %%edx \n\t"

" leal p , %%ecx \n\t"

" movl $0, %%ebx \n\t"

" movl $4, %%eax \n\t"

" int $0x80 \n\t"

::: "%eax", "%ebx", "%ecx", "%edx"

);

}

:请注意,我曾经lea将char的有效地址加载到ecx寄存器中;对于ebx我尝试$ 0和$ 1的价值,它似乎仍然可以工作…

int main()

{

__asm__ __volatile__

(

" movl $1, %%edx \n\t"

" subl $4, %%esp \n\t"

" movl $80, (%%esp)\n\t"

" movl %%esp, %%ecx \n\t"

" movl $1, %%ebx \n\t"

" movl $4, %%eax \n\t"

" int $0x80 \n\t"

" addl $4, %%esp\n\t"

::: "%eax", "%ebx", "%ecx", "%edx"

);

}

注意:它之所以有效是因为Intel处理器的字节序!:D

以上是 在GCC内联汇编中进行syscall 的全部内容, 来源链接: utcz.com/qa/425427.html

回到顶部