是否可以从内联汇编块中使用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的价值,它似乎仍然可以工作…
lea
ecx
ebx
避免使用外部字符
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