在程序里直接加入汇编指令是更为直接的办法,但是这样也限制了可移植性
比如下面的语句,直接把 %ebp 赋值给ebp_ptr,ebp_ptr再加1就是上一帧的返回地址。
int *ebp_ptr; asm("movl %%ebp,%0"
: "=r" (ebp_ptr) // output
);
ebp_ptr++;
|
另外,今天还看到了这种asm的用法:可以直接set某一个unsigned char,
这样就不用set %bl再 movzbl %bl, %eax
unsigned char byte_result;
*dest = x*y;
asm("setae %0"
: "=r" (byte_result) // output; 就在这里!直接赋值程序里的unsigned char
);
return (int) byte_result;
|
阅读(1415) | 评论(0) | 转发(0) |