在记事本中写算法题和在纸上写其实感觉差不多,反正是不能进行调试。想起某高手的话,写代码要做到“人机合一”,写高级语言时(指的是 C 和 C++)脑海中要知道当前写的代码对应的反汇编代码,也就是要深入了解编译器对高级语言的处理。什么时候能达到这样的境界呢? LeetCode 题库的第 20 题——有效 ...
分类:
其他好文 时间:
2018-08-04 00:59:07
阅读次数:
192
这个实验的要做的是用gdb逆向一段code,通过查看汇编代码以及单步调试找出这段code需要你填入的字符串,好像每个人都不一样,所以每个人都需要找到自己的拆弹密码,很有意思。 实验一共有6关,我们一关关来看一下: phase_1 打开bomb.c看些c源码(这里的核心方法已经被删除了,只能看到最外层 ...
分类:
移动开发 时间:
2018-07-29 22:27:47
阅读次数:
851
简介 这两个都是伪指令:ADR 是小范围的地址读取伪指令,LDR 是大范围的读取地址伪指令。可实际使用的区别是: ADR 是将基于 PC 相对偏移的地址值或基于寄存器相对地址值读取的伪指令,而 LDR 用于加载 32 位立即数或一个地址到指定的寄存器中。 以下面的汇编代码为例: ~~~~ .glob ...
分类:
其他好文 时间:
2018-07-20 20:04:42
阅读次数:
138
1.软件窗口说明 OllyDBG 中各个窗口的名称如下图。简单解释一下各个窗口的功能, 反汇编窗口:显示被调试程序的反汇编代码,标题栏上的地址、HEX 数据、反汇编、注释可以通过在窗口中右击出现的菜单 界面选项->隐藏标题 或 显示标题 来进行切换是否显示。用鼠标左键点击注释标签可以切换注释显示的方 ...
分类:
数据库 时间:
2018-07-06 12:18:38
阅读次数:
189
1. gcc -E source_file.c-E,只执行到预编译。直接输出预编译结果。2. gcc -S source_file.c -S,只执行到源代码到汇编代码的转换,输出汇编代码。3. gcc -c source_file.c-c,只执行到编译,输出目标文件。4. gcc (-E/S/c/) ...
分类:
其他好文 时间:
2018-06-27 22:32:07
阅读次数:
170
参考:https://blog.csdn.net/haoel/article/details/2886 一、GCC编译命令:gcc(选项)(参数) -o:指定生成的输出文件; -E:仅执行编译预处理; -S:将C代码转换为汇编代码; -wall:显示警告信息; -c:仅执行编译操作,不进行连接操作。 ...
分类:
其他好文 时间:
2018-06-09 11:32:52
阅读次数:
109
我们都知道,函数在内存中,本质就是一段汇编代码.调用的时候,使用call代码,执行完成之后,返回.所谓的函数指针,其实存放着就是(函数)这段汇编代码的内存地址. 返回类型 (调用约定 * 指针名)(参数列表);可能有人的听说过(游戏外挂).比如一个游戏外挂里面有一个函数.run(方向,步数)当我们写 ...
分类:
其他好文 时间:
2018-06-05 23:24:48
阅读次数:
144
功能:通过修改EIP寄存器实现32位程序的DLL注入 <如果是64位 记得自己对应修改汇编代码部分> 原理:挂起目标进程,停止目标进程EIP的变换,在目标进程开启空间,然后把相关的指令机器码和数据拷贝到里面去,然后修改目标进程EIP使其强行跳转到我们拷贝进去的相关机器码位置,执行相关,然后跳转回来。 ...
分类:
其他好文 时间:
2018-05-26 22:42:13
阅读次数:
217
HOOK_游戏代码 8B 00 8B 08 8B 91 A8 00 00 00 地址-15 4E5E954E5EA 44E5E95DIRECT 从733E00开始搜 6B 00 94 51 6C 地址+22 F3930CC 玩家数组 同版本的人物基址减去同版本的玩家数组,找到汇编代码的FPS地址使用 ...
分类:
其他好文 时间:
2018-05-26 22:40:29
阅读次数:
655
我们之前在 C 语言中学习了前置 ++ 和后置 ++。应该知道 i++ 是将 i 的值作为返回值,i + 1;++i 是先 i+1,再返回 i 的值。那么它们真的有区别吗?我们来编程看看,在 VS 中进行反汇编,看看汇编代码是怎样处理的。?我们看到它们两个的处理在汇编层面是一样的,并没有什么区别。那么这是怎么回事呢?现代的编译器已经在自动优化了,因为它看到我们只是进行 ++ 操作,并没有用到它的返回值。所以就自作主张的给优化了,其实这样优化后,二进制程序的效率更加高效了。但是优化后的二进制程序丢失了 C/C++ 的原生语义,因此我们不可能从编译后的二进制程序去还原 C/C++ 程序。那么 ++ 操作符可以重载吗?如果可以,那它如何区分前置 ++ 和后置 ++ 呢?在 C++ 中,++ 操作符是可以被重载的,全局函数和成员函数均可进行重载,重载前置 ++ 操作符不需要额外的参数,但在重载后置 ++ 操作符时需要一个 int 类型的占位参数。
分类:
其他好文 时间:
2018-05-25 21:16:30
阅读次数:
158