首页
社区
课程
招聘
未解决 [求助]汇编代码求解-3
发表于: 2023-7-10 21:03 4758

未解决 [求助]汇编代码求解-3

2023-7-10 21:03
4758
收藏
免费 0
支持
分享
最新回复 (13)
雪    币: 4239
活跃值: (4208)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
  ...
  局部变量1  <- ebp-8
  旧的EBP   <- ebp-4
  返回地址  <- ebp
  ...
也取决于调用约定.     使用ebp-8而不是ebp-4是为了避免覆盖旧的ebp和返回地址。 
2023-7-10 23:05
0
雪    币: 4744
活跃值: (2666)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
把你看到的 汇编 代码 贴全了, 再看吧。 你写的代码特殊, n1 n2 赋值同一个, 有可能启用了编译优化,自动调整执行顺序了
2023-7-10 23:50
0
雪    币: 237
活跃值: (501)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4

是书上错误了吗?

上传的附件:
2023-7-11 08:35
0
雪    币: 515
活跃值: (3174)
能力值: ( LV7,RANK:140 )
在线值:
发帖
回帖
粉丝
5
你上个帖子的主题为什么编辑掉了?问问题并不丢人,主题编辑掉了后面的人来了不知道提问是什么,单纯看回复贴可能就没有意义了。
另外就是昨天的回复里面都提到了返回地址入栈,如果不懂的话建议你还在原帖继续问,如果懂了,为什么今天这个帖子里没有体现出来?
2023-7-11 09:09
0
雪    币: 237
活跃值: (501)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
yeyeshun 你上个帖子的主题为什么编辑掉了?问问题并不丢人,主题编辑掉了后面的人来了不知道提问是什么,单纯看回复贴可能就没有意义了。 另外就是昨天的回复里面都提到了返回地址入栈,如果不懂的话建议你还在原帖继续问 ...
大佬,求细解?   返回地址在图上不是入栈了吗?
2023-7-11 09:50
0
雪    币: 4239
活跃值: (4208)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
goose007 大佬,求细解? 返回地址在图上不是入栈了吗?
一个是Debug编译下的汇编    一个是 Release编译下的汇编 

D 无优化
R  优化后
2023-7-11 11:06
0
雪    币: 237
活跃值: (501)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
Mxixihaha 一个是Debug编译下的汇编 一个是 Release编译下的汇编 D 无优化 R 优化后
我知道会有优化,但n1和n2位置都对换了,那不是在分析时会有误区吗?
2023-7-11 11:13
0
雪    币: 4744
活跃值: (2666)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
如果带优化选项,重点在性能 或 存储了, 而不是 可读性。 自己实际动手编译,  看一下  编译出来的 代码文件。 书不是万能的, 重点是理解思想和目的, 并实际测试与应用。
2023-7-11 11:26
0
雪    币: 24521
活跃值: (4372)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
goose007 我知道会有优化,但n1和n2位置都对换了,那不是在分析时会有误区吗?
有什么误区,变量名只是对人有意义,对计算机来说存储单元存放的数据才有意义,你觉得混乱是因为你看了源代码,但是通过对比也能看明白。逆向就是要用机器的思维去看汇编代码,绝大多数情况下你是看不到源代码的,这个例子就好比张三住家里或住宾馆也改变不了他是张三的这样一个事实。
2023-7-11 11:30
0
雪    币: 237
活跃值: (501)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
看了各位大佬的解答,依旧懵懂,主要是这本书中其他相似度很高的代码,其函数内第一个变量地址都在ebp+4处,唯独此代码第一个变量地址在ebp+8处,按理说作者用到其他优化,应该会在书中进行说明,但并没有特殊说明,说明作者整本书应该按一种方式进行编译---书是C++反汇编与逆向分析技术揭秘(第2版) 
2023-7-11 11:46
0
雪    币: 515
活跃值: (3174)
能力值: ( LV7,RANK:140 )
在线值:
发帖
回帖
粉丝
12
你的怀疑是有道理的。我感觉一般编译器对于局部变量的排布,应该是先声明的离ebp更近一些,但是这个也许会根据编译器的不同而产生变化。
但是本身来说,这个例子的侧重点可能不是给你演示局部变量在栈中的分布,所以也许是特殊构造的,只是方便演示一些东西。
建议你可以上手自己编译和调试看看,这个例子我用vs的话是编不出文中的汇编代码的,debug编译出来的结果差别很大,release编译干脆什么代码都没生成,全给优化掉了。
gcc编译出来的结果比较接近,也确实如你所怀疑的,[ebp-4]是n1。建议还是配合实际代码进行观察,单纯看书可能还是会差点感觉
2023-7-11 13:52
0
雪    币: 267
活跃值: (438)
能力值: ( LV9,RANK:190 )
在线值:
发帖
回帖
粉丝
13

ebp-8已经是函数里面的变量了,long a , b ; 向参数ebp+x向b赋值,不就是ebp-8了吗?

话说回来,如果是逆向,你不必关心ebp - 多少,我只要知道它访问的位置就行了,后面访问相同的位置,就知道是这个变量就好了,管他ebp-多少啊,没有实际意义。

最后于 2023-7-18 19:34 被linziqingl编辑 ,原因:
2023-7-18 19:30
0
雪    币: 1416
活跃值: (4398)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
14
debug,release两种都编译调试看看?
2023-7-21 10:24
0
游客
登录 | 注册 方可回帖
返回
//