1. //for 反汇编
  2. #include<stdio.h>
  3.  
  4. int main()
  5. {
  6. int i=;
  7. int s=;
  8. for(i=;i<;i++)
  9. {
  10. s=s+;
  11. }
  12. s=;
  13. for(i=;i>=;i--)
  14. {
  15. s=s+;
  16. }
  17.  
  18. return ;
  19.  
  20. }
  1. //for 反汇编
  2. #include<stdio.h>
  3.  
  4. int main()
  5. {
  6. 000000013F1231E0 push rdi
  7. 000000013F1231E2 sub rsp,10h
  8. 000000013F1231E6 mov rdi,rsp
  9. 000000013F1231E9 mov ecx,
  10. 000000013F1231EE mov eax,0CCCCCCCCh
  11. 000000013F1231F3 rep stos dword ptr [rdi]
  12. int i=;
  13. 000000013F1231F5 mov dword ptr [rsp],
  14. int s=;
  15. 000000013F1231FC mov dword ptr [s],
  16. for(i=;i<20;i++)
  17. 000000013F123204 mov dword ptr [rsp],0Ah
  18. 000000013F12320B jmp main+35h (013F123215h)
  19. 000000013F12320D mov eax,dword ptr [rsp]
  20. 000000013F123210 inc eax
  21. 000000013F123212 mov dword ptr [rsp],eax
  22. 000000013F123215 cmp dword ptr [rsp],14h
  23. ; i>=20 则跳出循环
  24. 000000013F123219 jge main+47h (013F123227h)
  25. {
  26. s=s+;
  27. 000000013F12321B mov eax,dword ptr [s]
  28. 000000013F12321F inc eax
  29. 000000013F123221 mov dword ptr [s],eax
  30. }
  31. 000000013F123225 jmp main+2Dh (013F12320Dh)
  32. s=;
  33. 000000013F123227 mov dword ptr [s],
  34. for(i=;i>=1;i--)
  35. 000000013F12322F mov dword ptr [rsp],0Ah
  36. for(i=;i>=1;i--)
  37. 000000013F123236 jmp main+60h (013F123240h)
  38. 000000013F123238 mov eax,dword ptr [rsp]
  39. 000000013F12323B dec eax
  40. 000000013F12323D mov dword ptr [rsp],eax
  41. 000000013F123240 cmp dword ptr [rsp],
  42. ;小于则跳出循环
  43. 000000013F123244 jl main+72h (013F123252h)
  44. {
  45. s=s+;
  46. 000000013F123246 mov eax,dword ptr [s]
  47. 000000013F12324A inc eax
  48. 000000013F12324C mov dword ptr [s],eax
  49. }
  50. 000000013F123250 jmp main+58h (013F123238h)
  51.  
  52. return ;
  53. 000000013F123252 xor eax,eax
  54.  
  55. }
  56. 000000013F123254 add rsp,10h
  57. 000000013F123258 pop rdi
  58. 000000013F123259 ret

图片来自:《天书夜读 从汇编语言到windows内核编程》 作者:谭文 邵坚磊

如果是release版,for被优化,模仿do-while语句,把跳转判断以及限制变量的改变放在结尾处。

struct寻址:

在c反汇编中,结构与枚举、联合没有差别。

struct寻址&for反汇编的更多相关文章

  1. C struct结构体内存对齐问题

    在空间看到别人的疑问引起了我的兴趣,刚好是我感兴趣的话题,就写一下.为了别人的疑问,也发表在qq空间里.因为下班比较晚,10点才到家,发表的也晚.其实是个简单的问题.  直接用实例和内存图说明: #i ...

  2. IDA反汇编学习

    1 转自:http://www.cnblogs.com/vento/archive/2013/02/09/2909579.html IDA Pro是一款强大的反汇编软件,特有的IDA视图和交叉引用,可 ...

  3. linux内核学习之一 简单c语言反汇编

    (我是第一次发技术博客的菜鸟,恳请大家指导!!) 一  由简单c程序生成汇编代码 首先给出本次我们要反汇编的简单c语言程序:(够简单吧~) 在linux环境中使用下面的命令条件编译: 生成汇编文件sh ...

  4. 网络IPC:套接字之寻址

    在学习用套接字做一些有意义的事情之前,需要知道如何确定一个目标通信进程. 进程的标识有两个部分:计算机的网络地址可以帮助标识网络上想与之通信的计算机,而服务可以帮助标识计算机上特定的进程. 1.字节序 ...

  5. POJ 2002 Squares 解题报告(哈希 开放寻址 & 链式)

    经典好题. 题意是要我们找出所有的正方形.1000点,只有枚举咯. 如图,如果我们知道了正方形A,B的坐标,便可以推测出C,D两点的坐标.反之,遍历所有点作为A,B点,看C,D点是否存在.存在的话正方 ...

  6. Ext2文件系统布局,文件数据块寻址,VFS虚拟文件系统

    注:本分类下文章大多整理自<深入分析linux内核源代码>一书,另有参考其他一些资料如<linux内核完全剖析>.<linux c 编程一站式学习>等,只是为了更好 ...

  7. C++反汇编与逆向分析技术揭秘

    C++反汇编-继承和多重继承   学无止尽,积土成山,积水成渊-<C++反汇编与逆向分析技术揭秘> 读书笔记 一.单类继承 在父类中声明为私有的成员,子类对象无法直接访问,但是在子类对象的 ...

  8. [译]反-反汇编 & 混淆 #1: 苹果没有遵循自己制定的Mach-O规范?

    原文地址:http://reverse.put.as/2012/02/02/anti-disassembly-obfuscation-1-apple-doesnt-follow-their-own-m ...

  9. C++函数调用的反汇编过程及Thunk应用

    x86汇编基础知识 1. 汇编常用寄存器 esp,(Extended stack pointer)栈顶指针.因为x86的栈内存是向下扩展的,因此当push入栈时,esp–.pop出栈时,esp++.e ...

随机推荐

  1. 001.CI4框架CodeIgniter的默认访问路径url

    1. 我们解压缩CI4的压缩包,找到app目录,点开Controllers目录,在Home.php文件中,写入我们的如下代码: 002.我们来访问我们的网站 http://127.0.0.1/CI4/ ...

  2. Problem B: Bulbs

    Problem B: Bulbs Greg has an m×n grid of Sweet Lightbulbs of Pure Coolness he would like to turn on. ...

  3. IDEA启动Tomcat报错Address localhost:1099 is already in use解决办法

    问题:Error running 'lugia-web': Address loaclhost:1099 is already in use如下图 解决方法:cmd输入下面命令: netstat -a ...

  4. Ican协议建立连接我的感悟

    有一个情形我突然之间想明白了. 注意下面情形:                             假设节点A与节点B已经 正常的建立了连接,并且进行了通讯. 假设 节点B收到了 节点A 的 &q ...

  5. maven集成SSM项目,Tomcat部署运行——SSM整合框架搭建(二)之问题

    问题一.当放开controller中的方法,出现如下问题 ### Error querying database. Cause: org.springframework.jdbc.CannotGetJ ...

  6. golang用slice、list当queue

    背景 golang没有queue这种类型,不过可以用slice.list模拟 slice当queue 声明队列 var queue []int 入队一个元素: queue = append(queue ...

  7. Emacs: 设置窗口标题格式

    Emacs默认的窗口标题常常比较简单,例如我的默认标题是"emacs@ubuntu".如果想要在标题中显示更多的信息,我们可以对它进行一些设置.由于Emacs的可扩展性,这种修改实 ...

  8. Python 中使用动态创建类属性的机制实现接口之后的依赖

    我们在自动化测试中经常会需要关联用例处理,需要动态类属性: 推荐使用第二种方法: 创建:setattr() 获取:getattr() 两种,如何创建 类属性 loan_id # 第一种,创建 # 类名 ...

  9. ubuntu12.04 eclipse安装PyDev

    在ubuntu软件中心安装的eclipse版本为3.7,install new software时,搜索出来的PyDev版本较高(5.6...): 高版本的PyDev要求较高版本的eclipse.详情 ...

  10. Docker部署Python应用程序

    Docker部署Python应用程序 1. 单个py文件部署 生成Dockerfile 文件 插件用的豆瓣的镜像,,重置时间(容器的默认时间是UTC时间与宿主机的相差8小时). 文中需要三个插件(pe ...