如何在C++中插入汇编代码 (内联汇编)Demo(只有两个参数的函数调用)
By 任帅(Samren)
最近需要在C++中插入汇编代码,具体要求是这样的:调用函数时,参数并没有生成,所以需要先生成参数,压入堆栈,最后调用函数地址。
代码如下:
1 #include <stdio.h> 2 #include <vector> 3 4 using namespace std; 5 6 void fun(int x ,int y) 7 { 8 int a = 0; 9 a = x-y; 10 printf("test:%d\n",a); 11 } 12 13 void main() 14 { 15 vector<int> vParam; 16 int ESP_size = 0; 17 int temp; 18 19 vParam.push_back (8); 20 vParam.push_back (5); 21 22 //把参数从右往左压入堆栈 23 for (int i = vParam.size ()-1;i>=0;i--) 24 { 25 temp = vParam.at (i); 26 ESP_size+=sizeof(temp); 27 __asm{ 28 mov edx, temp; 29 push edx; 30 } 31 } 32 //call 函数地址,执行函数,记得把ESP指针恢复 33 __asm{ 34 call fun 35 mov eax, ESP_size 36 add esp, eax 37 } 38 }
运行结果: