在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