在GCC内联汇编中进行syscall
是否可以从内联汇编块中使用syscall编写单个字符?如果是这样,怎么办?它应该看起来像“东西”:
__asm__ __volatile__ (
" movl $1, %%edx nt"
" movl $80, %%ecx nt"
" movl $0, %%ebx nt"
" movl $4, %%eax nt"
" int $0x80 nt"
::: "%eax", "%ebx", "%ecx", "%edx"
);
$ 80是ascii中的“ P”,但是什么也不会返回。
任何建议,不胜感激!
回答:
就像是
char p = 'P';int main()
{
__asm__ __volatile__
(
" movl $1, %%edx nt"
" leal p , %%ecx nt"
" movl $0, %%ebx nt"
" movl $4, %%eax nt"
" int $0x80 nt"
::: "%eax", "%ebx", "%ecx", "%edx"
);
}
:请注意,我曾经lea将char的有效地址加载到ecx寄存器中;对于ebx我尝试$ 0和$ 1的价值,它似乎仍然可以工作…
int main(){
__asm__ __volatile__
(
" movl $1, %%edx nt"
" subl $4, %%esp nt"
" movl $80, (%%esp)nt"
" movl %%esp, %%ecx nt"
" movl $1, %%ebx nt"
" movl $4, %%eax nt"
" int $0x80 nt"
" addl $4, %%espnt"
::: "%eax", "%ebx", "%ecx", "%edx"
);
}
注意:它之所以有效是因为Intel处理器的字节序!:D
以上是 在GCC内联汇编中进行syscall的全部内容,