序言
一直在学习,就是没输出。这就很不对了,只学习没输出,这非常不好,因此在这个日子,我还是要花点时间整理一下自己的所学内容。
现在在学C语言,算是比较底层的了,但是反汇编是更底层,因此我就从写C语言代码来学习反汇编,如果我能把C语言的结构与汇编代码能对应上,应该就能学的很好了。
正向代码
第一个程序很简单,就是一个打印“Hello World!”
#include <stdio.h>
main()
{
printf("Hello World!\n");
}
汇编代码
我当时用的是 VS6.0,进入DEBUG调试,然后复制出如下代码:
--- c:\documents and settings\admin\桌面\project\c语言\no.1.c ------------------------------------------------------------------
1: #include <stdio.h>
2:
3: main()
4: { # 这里是执行main函数执行的操作,首先开辟栈空间,然后保存现场
00401010 push ebp # 将原ebp压入堆栈中
00401011 mov ebp,esp # 另ebp的值等于esp
00401013 sub esp,40h # 提升堆栈40h(十六进制)
00401016 push ebx # 保存现场
00401017 push esi # 保存现场
00401018 push edi # 保存现场
00401019 lea edi,[ebp-40h] # 将ebp-40h 的地址存入edi中
0040101C mov ecx,10h # 设置计数器 16
00401021 mov eax,0CCCCCCCCh # 将CCCCCCCC存入eax中
00401026 rep stos dword ptr [edi] # 向 edi 中的堆栈地址开始循环写入CCCCCCCC 16次,在硬编码中,CPU遇到CC会暂停执行
5: printf("Hello World!\n");
00401028 push offset string "Hello World!\n" (0042001c) # 将内存中的Hello World!存入堆栈,内存地址为0042001c
0040102D call printf (00401060) # 调用printf函数
00401032 add esp,4 # 外平栈
6: }
00401035 pop edi # 恢复现场
00401036 pop esi
00401037 pop ebx
00401038 add esp,40h
0040103B cmp ebp,esp
0040103D call __chkesp (004010e0)
00401042 mov esp,ebp
00401044 pop ebp
00401045 ret
这里面有几个基础汇编指令,很简单,
结语
现在夜深了,后面有遗漏,在补上
如有错误,敬请指出,感谢指正! — 2019-05-10 23:03:11 于苏州
最新评论
这个软件有bug的,客户端windows有些键不能用如逗号、句号
没有收到邮件通知
我的评论通知貌似坏掉了,定位一下问题
测试一下重新部署后的邮件功能
居然看到自己公司的MIB库,诚惶诚恐
那可能是RobotFramework-ride的版本问题。我装的1.7.4.2,有这个限制。我有空再尝试下旧版本吧,感谢回复。
你好!我在python2.7中安装RobotFramework-ride的时候提示wxPython的版本最高是2.18.12,用pip下载的wxPython版本是4.10,而且我在那个路径下没有找到2
真的太好了,太感谢了,在bilibili和CSDN上都找遍了,终于在你这里找到了