如何快速查看将C反汇编的代码

查看反汇编主要的思路在于将 流程,处理,算法 区分开来。
1 函数调用
原C代码:

复制代码
int sum(int, int);
int main(){
int c = sum(1, 2);
printf("c=%d", c);
return 0;
}

int sum(int a, int b){
int c = a + b;
return c;
}
复制代码

反汇编的函数调用主要使用bp-frame式(不懂自己去查去)的调用方式:

mmm

然后是被调用的sum:

ss

 

2  for循环
基本的for循环是这样的:

复制代码
int sum(int b){
int c, i=0;
c = 0;
for(i=0; i<4; i++){
c += b;
}
return c;
}
复制代码

然后反汇编后,for循环一般是以下的形式的:

下面看看上面的c代码反汇编后变成了什么:

3 do-while循环
例子代码为:

复制代码
int sum(int b){
int c, i=0;
c = 0;
do{
c += b;
i++;
}while(i < 4);
return c;
}
复制代码

do-while循环的基本结构:


然后我例子代码的反汇编为:

 

4 while循环|
例子代码为:

复制代码
int sum(int b){
int c, i=0;
c = 0;
while(i < 4){
c += b;
}
return c;
}
复制代码

while反汇编的基本结构为:


上述代码反汇编的结果为:

5 if-else分支判断
例子代码的c语言为:

复制代码
int sum(int b){
int c, i=0;
c = 0;
if(i<0){
c = -1;
}else if(i<1){
c = 1;
}else if(i<3){
c = 3;
}

return c;
}
复制代码

if-else分支的基本结构:


然后上述代码的反汇编结果为:

6 switch-case 判断分支:

复制代码
int sum(int b){
int c, i=0;
c = 0;
switch(i){
case 1:
c = -1;
break;
case 2:
c = 0;
break;
case 3:
c = 1;
break;
default:
c = 2;
}
return c;
}
复制代码


反汇编结果很直接:

 

 7 使用结构体:
结构体的例子代码:

复制代码
int sum(int b){

jack j;
pjack pj = &j;


j.one = 1;
j.two = 2;
pj->one = 3;
pj->two = 4;
return pj->two;
}
复制代码

结构体反汇编代码:




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
vs2017建立一个静态库lib工程 起号工程名字BeaEngine  然后选release配置选项 1,把headers\Includes下面到2个头文件拖到src\Includes的目录下面 2,把headers\BeaEngine.h拖出放到cpp工程所在目录下,并导入到vs2017的项目头文件栏 3,把src\BeaEngine.c 拖出放到cpp工程所在目录下,并导入到vs2017的项目源文件栏 4,把src目录下面的文件夹拖到cpp工程所在目录下. 把include\下面的beaengine文件夹拖出放到cpp工程所在目录下.把src\Includes文件夹拖出放到cpp工程所在目录下 4,项目-->属性--> c/c++ -->预编译头-->选择 不使用预编译头 5,项目-->属性--> c/c++ -->附加包含目录 beaengine文件夹, Includes文件夹, Includes\instr_set文件夹(注意后面2个文件夹是src拖出来到cpp工程所在目录下的) 6,注意错误提示,若有则单击提示,把#include <xxx> 修改为#include "xxx.h" 7,项目-->属性--> 常规-->无全程序优化 ,字符集选--》多字节字符集 8,项目-->属性--> c/c++ -->代码生成-->运行库 选择多线程(/MT) 9,项目-->属性--> c/c++ -->高级-->调用约定选择 __stdcall (lib和调用主程序都需要选择 __stdcall,否则默认以c调用,带@的符号找不到的错误提示) 10,调用主程序最好把headers\BeaEngine.h拖出放到cpp工程所在目录下,并导入到vs2017项目的头文件栏中 11,项目-->属性--> 常规-->字符集选--》多字节字符集使用 Unicode 字符集(已测试过能正常使用!lib和调用主程序都要做此项相同设置) 12,项目-->属性-->配置属性-->C/C++-->命令行-->附加选项,加入【/D "_CRT_SECURE_NO_DEPRECATE" 】(注:加入中括号中完整的内容),可修正如下提示错误 使用VS2005以上版本(VS2005、VS2008、VS2010)编译在其他编译器下正常通过的C语言程序,你可能会遇到类似如下的警告提示: 引用内容 warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 1>          c:/program files/microsoft visual studio 10.0/vc/include/string.h(105) : 参见“strcpy”的声明 warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 1>          c:/program files/microsoft visual studio 10.0/vc/include/stdio.h(234) : 参见“fopen”的声明 原因解释 这种微软的警告,主要因为那些C库的函数,很多函数内部是不进行参数检测的(包括越界类的),微软担心使用这些会造成内存异常,所以就改写了同样功能的函数,改写了的函数进行了参数的检测,使用这些新的函数会更安全和便捷。关于这些改写的函数你不用专门去记忆,因为编译器对于每个函数在给出警告时,都会告诉你相应的安全函数,查看警告信息就可以获知,在使用时也再查看一下MSDN详细了解。库函数改写例子:

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值