滴水逆向-数据类型-C代码是怎么变成汇编
通过调试发现,默认情况下写的C代码通过编译会自动变成汇编代码,但是如果写入下面裸函数代码则C代码不会变成汇编语言
// dstest1.cpp : Defines the entry point for the console application. // #include "stdafx.h" // 空函数 void Function() { } // 编写一个函数能够对任意2个整数实现加法,并分析函数的反汇编 int plus1(int x,int y) { return x+y; } // 编写一个函数,能够对任意3个整数实现加法,并分析函数的反汇编 int plus2(int x,int y,int z) { int t; int r; t = plus1(x,y); r = plus1(t,z); return r; } //编写一个函数,能够实现对任意5个整数实现加法,使用plus1和plus2 int plus3(int a,int b,int c,int d,int e){ int i; int j; int k; i = plus1(a,b); j = plus2(c,d,e); k = i+j; return k; } //程序入口 int main(int argc, char* argv[]) { //printf("Hello World!\n"); //plus2(3,4,5); //plus3(4,5,6,7,8); return 0; } 裸函数 // sjlx.cpp : Defines the entry point for the console application. // #include "stdafx.h" //无返回值,无参数 void __declspec(naked) Function() { __asm { push ebp mov ebp,esp sub esp,0x40 push ebx push esi push edi lea edi,dword ptr ds:[ebp-0x40] mov eax,0xCCCCCCCC mov ecx,0x10 rep stosd pop edi pop esi pop ebx mov esp,ebp pop ebp ret } } int main(int argc, char* argv[]) { //printf("Hello World!\n"); Function(); return 0; } ================================================================= //有返回值,有参数 int __declspec(naked) Function2(int x,int y) { __asm { push ebp mov ebp,esp sub esp,0x40 push ebx push esi push edi lea edi,dword ptr ds:[ebp-0x40] mov eax,0xCCCCCCCC mov ecx,0x10 rep stosd mov eax,dword ptr ds:[ebp+0x8] add eax,dword ptr ds:[ebp+0xC] pop edi pop esi pop ebx mov esp,ebp pop ebp ret } } int main(int argc, char* argv[]) { //printf("Hello World!\n"); Function2(1,2); return 0; } ======================================================================== //带局部变量的函数框架 int __declspec(naked) Function3(int x,int y) { __asm { push ebp mov ebp,esp sub esp,0x40 push ebx push esi push edi lea edi,dword ptr ds:[ebp-0x40] mov eax,0xCCCCCCCC mov ecx,0x10 rep stosd mov dword ptr ds:[ebp-0x4],3 mov dword ptr ds:[ebp-0x8],2 mov eax,dword ptr ds:[ebp+0x8] add eax,dword ptr ds:[ebp+0xc] pop edi pop esi pop ebx mov esp,ebp pop ebp ret } } int main(int argc, char* argv[]) { //printf("Hello World!\n"); Function3(1,2); return 0; }
迷茫的人生,需要不断努力,才能看清远方模糊的志向!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?