吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 8389|回复: 24
收起左侧

[其他转载] 从C语言到汇编,从汇编到C语言

 关闭 [复制链接]
ieiqp 发表于 2009-11-18 16:36
要从事“逆向工程”工作,或对其感兴趣,请必然要接触到汇编语言。然而我们在对计算机语言的了解大都是从高级语言(如C、VB、Dephi)开始的。那当我们阅读由高级语言翻译成的机器语言时肯定会遇到很多障碍。 ...
  要从事“逆向工程”工作,或对其感兴趣,请必然要接触到汇编语言。然而我们在对计算机语言的了解大都是从高级语言(如C、VB、Dephi)开始的。那当我们阅读由高级语言翻译成的机器语言时肯定会遇到很多障碍。下面是我在看了相关书籍后,做的一些笔记,希望有点参考价值!
  
  一、循环语句与发汇编后的机器语言
  1、for循环
  下面是一段C语言的代码,我们的目的是来看其反汇编的结果:
  int myfunction(int a,int b)
  {
  int c = a+b;
  int i;
  for(i=0;i<50;i++)
  {
  c = c+i;
  }
  return c;
  }
  前面的反汇编暂时不理它,这里从for的地方开始反汇编,结果如下:
  for(i=0;i<50;i++)
  00412BC7  mov        dword ptr [i],0   // i=0; 给循环变量赋初值
  00412BCE  jmp         myfunction+39h (412BD9h)// 跳到第一次循环处
  >  00412BD0  mov        eax,dword ptr [i]
  |   00412BD3  add         eax,1  // i++;修改循环变量
  |   00412BD6  mov        dword ptr [i],eax
  |   00412BD9  cmp        dword ptr [i],32h //  比较 i 与50的关系, 检查循环条件
  |   00412BDD  jge          myfunction+4Ah (412BEAh)  // 当 i>=50 [即 !(i<50) ] 时则跳出循环
  |   {
  |      c = c+i;
  |   00412BDF  mov         eax,dword ptr [c]  // 变量 c
  |   00412BE2  add         eax,dword ptr [i]   // 变量 i
  |   00412BE5  mov         dword ptr [c],eax  // c=c+i;
  |   }
  <  00412BE8  jmp         myfunction+30h (412BD0h)  // 跳回去修改循环变量
  00412BEA  mov         eax,dword ptr [c]
  }
  可以看到for循环主要用这么几条指令来实现:mov进行初始化。jmp跳过循环变量改变代码。cmp实现条件判断,jge根据条件跳转。
  用jmp回到循环改变代码进行下一次循环。所以for结构有以下的显著特征:
  
  mov <循环变量>,<初始值>   ; 给循环变量赋初值
  jmp B       ;跳到第一次循环处
  A: (改动循环变量)       ;修改循环变量。
  …
  B: cmp <循环变量>,<限制变量>  ;检查循环条件
  jgp  跳出循环
  (循环体)
  …
  jmp A       ;跳回去修改循环变量
  
  2、do循环
  再看一下do循环,因为 do循环没有修改循环变量的部分,所以比for循环要简单一些。
  do
  {
  c = c+i;
  00411A55  mov        eax,dword ptr [c]
  00411A58  add         eax,dword ptr [i]
  00411A5B  mov         dword ptr [c],eax
  } while(c< 100);
  00411A5E  cmp        dword ptr [c],64h
  00411A62  jl           myfunction+35h (411A55h)
  return c;

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

『棟』 发表于 2009-11-18 16:42
[s:307]汇编指令..我看了1星期有了。 ..还没记得,,,
alphance 发表于 2009-11-18 16:56
这不是天书夜读那本书上的那段吗,我最近看过
214134 发表于 2009-11-18 17:05
001 发表于 2009-11-18 20:44
  看不懂啊。
正在輸入中 发表于 2009-11-21 21:22
C语言学了半学期了。也就点皮毛- -
回首以惘然 发表于 2009-11-24 12:13
debug版的反汇编指令  和  天书夜读写的差不多
柯梦南 发表于 2009-11-25 10:00
都是大侠啊,真牛
倒霉熊 发表于 2009-11-26 10:47
汇编看的头痛
kelvar 发表于 2009-11-26 15:17
看对应代码还是用VC++调试器看吧,直观而又清晰
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-17 01:47

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表