休闲程序必须打印3,但是' buff'从asm看不到。
#include <stdio.h>
char buff[] = "%d\n";
int main (void)
{
asm("mov eax, 3");
asm("mov esi,eax");
asm("mov edi,buff");
asm("mov eax, 0");
asm("call printf");
return 0;
}
我尝试使用asm intel语法。
它编译为:gcc -masm=intel -o test2 test2.c
该行
asm("mov edi,buff");
错了,我怎么在这里写buff呢?我试过[buff]但是没有用。谢谢你
**更新:
下一个程序可行,但是正在使用AT&amp; T语法:
#include <stdio.h>
char Format[] = "%d\n";
int main (void)
{
asm
(
// Make stack space for arguments to printf
"movl $3, %eax\n"
"movl %eax, %esi\n"
"movl $Format, %edi\n"
"movl $0, %eax\n"
"call printf\n"
);
return 0;
} //compile with gcc -o test2 test2.c
我尝试使用intel语法做同样的事情,但我不知道如何从asm corectly访问全局变量
答案 0 :(得分:0)
正如@Peter Cordes对我说的那样,我在https://stackoverflow.com/tags/x86/info读到有关OFFSET关键字的信息,现在它可以正常工作了。 我知道问题是我在注册表中放了一个数据,而不是一个地址,看起来像OFFSET关键字是我正在搜索的。
Wrorking是:
#include <stdio.h>
char buff[] = "%d\n";
int main (void)
{
asm("mov eax, 3");
asm("mov esi,eax");
asm("mov edi,OFFSET buff");
asm("mov eax, 0");
asm("call printf");
return 0;
}