c/c++逆向(一)

来源:互联网 发布:pano.js 720全景图 编辑:程序博客网 时间:2024/06/07 05:54

一个基本的c console程序 :

int Sum1(int nNum1, int nNum2){int nRet = 0;nRet = nNum1 + nNum2;return nRet;}_declspec(naked) int Sum2(int a, int b){__asm{pushebpmovebp,espsubesp,44hpushebxpushesipushedileaedi,[ebp-44h]movecx,11hmoveax,0cccccccchrepstosdword ptr es:[edi]//局部变量赋值mov[ebp-4],0//求和moveax,[ebp+8]//第一个参数addeax,[ebp+0ch]//第二个参数//局部变量(返回值) 赋值(编译器对此代码肯定会有优化、因为一般通过eax得到函数的返回值)mov[ebp-4],eaxpopedipopesipopebxmovesp,ebppopebpret}}int main(int argc, char* argv[]){int nRet = 0;int nNum1 = 5;int nNum2 = 8;nRet = Sum1(nNum1, nNum2);//用汇编实现上面代码注:这里不考虑release版本、编译器所做的优化__asm{//局部变量赋值mov[ebp-4],0mov[ebp-8],5mov[ebp-0ch],8//压栈参数-从右向左     注:[ebp+4]=call的下一条指令moveax,[ebp-0ch]pusheax//在函数内部访问时=[ebp+0ch]movecx,[ebp-8]push    ecx//在函数内部访问时=[ebp+8]//调用函数callSum2//平衡参数addesp,8//给局部变量(返回值) 赋值mov[ebp-4],eax}return 0;}


0 0