每日逆向的理解和积累。
汇编阅读练习
练习1
汇编代码及解释——
C的release版本
- main函数
C的debug版本
- main函数(其余4个子函数略)
经过到目前为止的对比分析,可以比较确定的是,release版的程序会尽可能的将不涉及到用户输入的子函数集成到main函数中,不涉及到用户输入的变量都会采用寄存器的形式进行存储和访问。而有关用户输入的变量和子函数,都会尽可能的维持原样。
对应源码——
问题描述——C语言数制转换:给定一个 M 进制的数 x,实现对 x 向任意的一个非 M 进制的数的转换。
具体编程实现如下——
练习2
汇编代码及解释——
C的release版本
- main函数
C的debug版本
- main函数
对于程序中定义了但是没有使用的常量,release版的程序会直接丢弃这些常量。
对应源码——
问题描述——一道题目,玩转C语言指针数组和指向指针的指针。
练习3
汇编代码及解释——
C的release版本
- main函数
C的debug版本
- main函数
对应源码——
问题描述——C语言写的简单的定时关机程序:写一个定时关机的小程序,可以立即关闭计算机,也可以一段时间后关闭计算机。这里主要考察system()命令。
参考资料
What does “nop dword ptr 【rax+rax】” x64 assembly instruction do?
练习4
汇编代码及解释——
C的release版本
- main函数
C的debug版本
- main函数
对应源码——
问题描述——C语言动态数组的实现:数组长度随数组元素改变,不会溢出,不会浪费资源。我们知道,C语言中的数组大小是固定的,定义的时候必须要给一个常量值,不能是变量。这带来了很大的不便,如果数组过小,不能容下所有数组,如果过大,浪费资源。请实现一个简单的动态数组,能够随时改变大小,不会溢出,也不会浪费内存空间。
练习5
汇编代码及解释——
C的release版本
- main函数
C的debug版本
- main函数
对应源码——
问题描述——C语言实现的猜拳游戏(剪子锤子布),让你与电脑对决。