![](https://img-blog.csdnimg.cn/20190918140129601.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C与汇编
文章平均质量分 86
本专栏主要记录C/C++的学习,不仅于基础的语法学习,更多的是关注底层的原理。
Dao-道法自然
一路寒风身如絮,命海沉浮客独行。
展开
-
分析各种表达式求值过程
C++中的除法和数学中的除法不同,在C++中,除法运算不保留余数,有专门求取余数的运算(运算符为%),也称之为取模运算。在Debug编译选项组中,使用的是Od+ZI选项,此选项使编译器产生的一切代码都以便于调试为根本前提,甚至为了便于单步跟踪以及源码和目标代码块的对应阅读,不惜增加冗余代码。如果在程序的逻辑中,声明的变量没有被修改过,而且上下文中不存在针对此变量的取地址和间接访问操作,那么这个变量就等价于常量,编译器就认为可以删除这个变量,直接用常量代替。开启02选项后,编译出来的汇编代码会有较大的变化。原创 2023-10-01 02:35:08 · 199 阅读 · 0 评论 -
基本数据类型在内存中存储形式
在C++中,可以使用宏机制#define来定义常量,也可以使用const将变量定义为一个常量。#define定义常量名称,编译器在对其进行编译时,会将代码中的宏名称替换成对应信息。宏的使用可以增加代码的可读性。const是为了增加程序的健壮性而存在的。常用字符串处理函数 strcpy 的第二个参数被定义为一个常量,这是为了防止该参数在函数内被修改,对原字符串造成破坏摘自《C++反汇编与逆向技术揭秘》作者:钱林松计算机的工作流程归根结底是输入→处理→输出的过程,而数据正是被处理的对象。原创 2023-09-30 19:18:38 · 615 阅读 · 0 评论 -
局部变量,全局变量与内存
全局变量保存在data段,在程序编译链接就确定了;局部变量保存在stack段访问局部变量往往是通过[ebp-0xXXX],全局变量往往是一个地址[0xXXX]把局部变量或者全局变量压入堆栈需要使用寄存器给局部变量赋值,mov [esp-0xXXX],值函数有返回值往往借助寄存器,值或者地址。原创 2023-09-18 19:47:13 · 905 阅读 · 0 评论 -
EFLAGS寄存器与JCC指令
EFLAGS寄存器有32位,EFLAGS 寄存器的标志位可以通过各种指令进行操作和判断,例如条件分支指令、算术指令和控制指令等。程序可以根据标志位的值来进行条件判断和控制流程,从而实现不同的逻辑和功能。:进/借位标志位。用于表示某些算术操作或移位操作是否产生了进位或借位。:奇偶标志位。用于表示结果中 1 的个数的奇偶性。:辅助进位标志位。用于表示低 4 位的进位或借位情况。:零标志位。用于表示操作结果是否为零。:符号标志位。用于表示操作结果的最高有效位(符号位)。:陷阱标志位。用于控制单步执行调试功能。原创 2023-09-18 19:43:02 · 377 阅读 · 0 评论 -
分析常见数据结构在内存中的存储形式
如果我们想计算出动态数组的长度,只需要用第三个地址减去第二个地址,然后除以元素的大小,就能 算出元素的个数了。// 指向自己的指针T* fisrt;// 指向数据的首地址T* last;// 最后一个元素的下一个位置(数据结束地址)T* end;// 指向缓冲区的结尾// 指向自己的指针// 指向头节点,头节点不存储数据int size;// 元素个数// 下一个节点// 上一个节点T data;// 数据域map对象:+00 指针,指向自己+04 头节点+08 元素个数。原创 2023-09-18 20:50:28 · 306 阅读 · 0 评论 -
分析字符串在内存中存储
本文会使用x64dbg分析4中字符串在内存中的存储。原创 2023-09-17 20:38:33 · 176 阅读 · 0 评论 -
循环结构在反汇编中特征
本文将使用IDA分析C语言中循环结构(do while,while,for)在反汇编中的特征。原创 2023-09-17 13:31:00 · 216 阅读 · 0 评论 -
分支结构在反汇编中特征
本文会使用IDA分析C语言的分支结构(if esle,switch)在反汇编代码中特征。原创 2023-09-17 12:50:58 · 274 阅读 · 0 评论 -
分析数组,结构体在反汇编中存储
本文会在IDA中分析数组,结构体在内存中的存储。原创 2023-09-18 19:44:38 · 357 阅读 · 0 评论 -
寄存器与内存详解
EAX主要作用是操作数和累加器EBX主要作用是指向Data Segment数据ECX主要作用是字符串和循环操作计数器EDX主要作用是指向输入输出设备的端口号,IO指针EBP与ESP配合使用通用做管理函数调用时堆栈操作ESI主要作用是配合EDI操作字符串,指向DS寄存器指向的数据EDI主要作用是操作字符串,作为基址访问数组,循环计数器调用函数时程序的堆栈操作,每当调用函数就会新起一个栈帧,ESP指向栈顶,EBP指向栈底部。原创 2023-09-18 19:45:47 · 3186 阅读 · 0 评论 -
常见汇编指令整理
本文会整理在逆向中常见的指令汇总。原创 2023-09-18 19:47:59 · 2115 阅读 · 0 评论 -
Main()函数的前世今生
在开始分析程序之前,我们第一个要解决的问题,就是如何定位到main函数,想要从二进制逆向的角度分析出main函数,就必须要了解正向的代码下main函数的所有的细节和特征。毕竟逆向的本质就是正向。原创 2023-09-08 23:25:01 · 319 阅读 · 0 评论 -
switch语句详解及底层实现原理
本文会介绍switch的基本用法,但主要介绍switch在底层汇编代码实现,总结其原理。原创 2024-01-28 23:20:38 · 1497 阅读 · 0 评论 -
命令行编译C程序
本文将介绍C语言命令行编译详情以及MSVC环境变量的配置。原创 2023-06-23 18:25:05 · 549 阅读 · 0 评论 -
你真的会写 HelloWorld 吗?
这里主要用于分析查看可执行文件在内存的存储情况,熟悉内存。在菜单栏下有一个open ram,打开内存找到你想要分析的进程,选中它即可查看内存Primary Memory 主要内存Entire Memory 全部内存内存中找数据寻找999,找999的 16进制的值,进行查找内存地址程序运行时,除了可执行程序外还有dll动态链接库支持主要页面通过这个功能可以跳转到指定到内存地址因为主要是使用的这款工具分析查看进程程序的内存状况,所以并不会全面的介绍学习这款工具.原创 2023-06-24 09:57:26 · 255 阅读 · 0 评论 -
正负整数小数在内存的存储
本节会主要学习正负的整数小数在内存的存储方式。原创 2023-06-24 12:21:51 · 416 阅读 · 0 评论 -
Visual Studio 2019使用详解
本文主要介绍VS2019开发工具的使用,主要包括编辑代码,Debug调试,内存,寄存器底层分析等。原创 2023-06-25 12:03:38 · 16521 阅读 · 2 评论