att汇编传递参数,不知该怎么写,求助
intel下
mov eax, [eax + 0x1c]
改为att汇编
"mov 0x1c(%%eax), %%eax;"
其中0x1c希望通过参数传递
像下面这样
asm (
"mov %0(%%eax), %%eax;"
:
: "m" ( para )
:
);
这样编译报错,不知道该怎么写了,求解 汇编 asm
[解决办法]
gcc下编译运行
[解决办法]
用寄存器, 不使用内存不就完了么, 而且只需要一条指令就够了:
#include <stdio.h>
int foo( char offset )
{
char a[100] = {0};
char *b = a;
a[0x1c] = 99;
a[0x2c] = 98;
int p = 0;
__asm__ __volatile__(
"movl (%1,%2), %0\n"
: "=r" (p) : "r" (b), "r" ((int)offset)
);
printf( " a[0x%X] = %d\n", offset, p );
return 0;
}
int main(int argc, char** argv)
{
foo ( 0x1c ); /* .. a[0x1c] = 99 */
foo ( 0x2c ); /* .. a[0x2c] = 98 */
return 0;
}
[解决办法]
这两种汇编格式应该有自动转化的工具