![](/img/trans.png)
[英]Call C function from asm file by passing function address in a register
[英]How to insert literal into register using asm function in .c file
我在当前代码中遇到了分段错误错误。 我尝试了许多不同的更改[edx] / edx /%[edx] / [%edx]的变化,但均未成功。 我想将edx寄存器的内容设置为null。 这是使用gcc的.c文件。 Linux上的Intel处理器。
#include <stdio.h>
int main()
{
asm("mov %edx, /0");
return 0;
}
我认为您正在将AT&T语法(在gcc中使用)与Intel语法混合在一起,其中第一个寄存器是目的地。 看看这个页面:
http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html
+------------------------------+------------------------------------+
| Intel Code | AT&T Code |
+------------------------------+------------------------------------+
| mov eax,1 | movl $1,%eax |
| mov ebx,0ffh | movl $0xff,%ebx |
| int 80h | int $0x80 |
| mov ebx, eax | movl %eax, %ebx |
| mov eax,[ecx] | movl (%ecx),%eax |
| mov eax,[ebx+3] | movl 3(%ebx),%eax |
| mov eax,[ebx+20h] | movl 0x20(%ebx),%eax |
| add eax,[ebx+ecx*2h] | addl (%ebx,%ecx,0x2),%eax |
| lea eax,[ebx+ecx] | leal (%ebx,%ecx),%eax |
| sub eax,[ebx+ecx*4h-20h] | subl -0x20(%ebx,%ecx,0x4),%eax |
+------------------------------+------------------------------------+
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.