滴水逆向-数据类型-C代码是怎么变成汇编
2021/7/28 11:35:55
本文主要是介绍滴水逆向-数据类型-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; }
这篇关于滴水逆向-数据类型-C代码是怎么变成汇编的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26MATLAB 中 A(7)=[];什么意思?-icode9专业技术文章分享
- 2024-11-26UniApp 中如何实现使用输入法时保持页面列表不动的效果?-icode9专业技术文章分享
- 2024-11-26在 UniApp 中怎么实现输入法弹出时禁止页面向上滚动?-icode9专业技术文章分享
- 2024-11-26WebSocket是什么,怎么使用?-icode9专业技术文章分享
- 2024-11-26页面有多个ref 要动态传入怎么实现?-icode9专业技术文章分享
- 2024-11-26在 UniApp 中实现一个底部输入框的常见方法有哪些?-icode9专业技术文章分享
- 2024-11-26RocketMQ入门指南:搭建与使用全流程详解
- 2024-11-26RocketMQ入门教程:轻松搭建与使用指南
- 2024-11-26手写RocketMQ:从入门到实践的简单教程
- 2024-11-25【机器学习(二)】分类和回归任务-决策树(Decision Tree,DT)算法-Sentosa_DSML社区版