首页
社区
课程
招聘
[旧帖] [求助]初学反汇编第1问(其实有很多问题) 0.00雪花
发表于: 2009-6-4 18:47 1732

[旧帖] [求助]初学反汇编第1问(其实有很多问题) 0.00雪花

2009-6-4 18:47
1732
下面这段是OD反汇编的代码
77C071D3 >  E8 4D2D0000     CALL msvcrt.77C09F25;这句的意思是说调用msvcrt模块的77C09F25地址处的函数吗??

77C071D8    8B48 14         MOV ECX,DWORD PTR DS:[EAX+14];这里的EAX是不是上面调用那个函数后的返回地址

77C071DB    69C9 FD430300   IMUL ECX,ECX,343FD;这句就有点看不懂了.IMUL好象我记得是乘法.但是具体是怎么实现的呢也就是说什么乘以什么然后放到哪里..而且为什么是3个参数?

77C071E1    81C1 C39E2600   ADD ECX,269EC3;这是将269EC3地址处的数据和ECX中的数据想加再放回ECX处(为什么不指明段寄存器呢?以前学习8086时记得应该是这样的ADD ECX,DS:[269EC3])

77C071E7    8948 14         MOV DWORD PTR DS:[EAX+14],ECX
77C071EA    8BC1            MOV EAX,ECX
77C071EC    C1E8 10         SHR EAX,10
77C071EF    25 FF7F0000     AND EAX,7FFF
77C071F4    C3              RETN

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (17)
雪    币: 55
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
第一个问题,你说的没错,但是仅仅这样啥都看不出来。可以考虑过去找一找函数名。
第二个问题,上面的eax返回的应该是一个结构指针,这里就是取该结构第六个dword值。
第三个问题,记得是有符号数乘法,格式忘了,去查intel手册或者等别人来答吧。
第四个问题,这指令是ecx加上立即数269EC3。

初学反汇编,如果连指令都弄不清楚就该准备一本工具书什么的……
2009-6-4 19:17
0
雪    币: 69
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
弱弱的问一句....
什么叫立即数
2009-6-4 19:21
0
雪    币: 88
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
立即数,我的理解就是相当于C语言的常量。
呵呵。不知道对不对!
还有,看了楼主上面的,也有一个问题:
不知道楼主看的是那本汇编的书,怎么我看了王爽老师的书。没有涉及到EAC,ESP这些寄存器的?
2009-6-5 10:39
0
雪    币: 69
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
回楼上的.不是王爽的那本书.是我自己用OD反汇编的一个小软件截取的代码
2009-6-5 11:36
0
雪    币: 399
活跃值: (38)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
6
1.是的
2.应该是的
3.请查阅指令手册
4.ADD ECX,269EC3=(ECX = ECX+269EC3)

正因为如此,Windows操作系统干脆为用户程序“安排好了一切”。具体表现在为用户程序的代码段、数据段和堆栈段全部预定义好了段描述符。这些段的起始地址为0,限长为ffffffff,所以用它们可以直接寻址全部的4 GB地址空间。程序开始执行的时候,CS,DS,ES和SS都已经指向了正确的描述符,在整个程序的生命周期内,程序员不必改动这些段寄存器,也不必关心它们的值究竟是多少(实际上,想改也改不了)。

所以对Win32汇编程序来说,整个源程序中竟然可以不用出现段寄存器的身影。这在DOS汇编编程中是不可想像的。回顾本节开头提出的问题,答案是:并不是Win32汇编源代码用不到段寄存器,而是用户在使用中不必去关心段寄存器!

                                           ---------《Windows环境下32位汇编语言程序设计》

PS.你给出的这段代码应该属于某个系统dll而不是你说的那个小软件
2009-6-5 11:56
0
雪    币: 88
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
这样的话。那本书有介绍到这些存储器的呢?
2009-6-5 12:43
0
雪    币: 69
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
我想这应该是那个软件调用了一个DLL里的函数.....
我想问一下...那如果有DS:.....那DS是指向的哪里呢
2009-6-5 12:52
0
雪    币: 88
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
ADD ECX,DS:[269EC3]
意思就是:ECX=ECX+((DS)*16+(269EC3))
这里的269EC3应该是偏移地址。
ADD ECX,269EC3
意思是:ECX=ECX+269EC3
2009-6-5 12:59
0
雪    币: 69
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
那DS里到底是什么东西呢
2009-6-5 13:20
0
雪    币: 1450
活跃值: (35)
能力值: (RANK:680 )
在线值:
发帖
回帖
粉丝
11
建议LZ还是先找本x86汇编的书好好的看看.
基础知识不容忽视.
2009-6-5 13:50
0
雪    币: 69
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
问一下....X86的书和8086的书有什么区别????
2009-6-5 14:03
0
雪    币: 54
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
电脑升级了,CPU总线从8位->16位->32位(寄存器位数相应增加)。
所以虽然理论基础是一样的,但是最好楼上提到的32位下的书来看看。
不然就会出现下面这个问题。



因为王爽老师的书是针对16位的,去掉那个E就比较眼熟了吧。
2009-6-5 14:25
0
雪    币: 88
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
也是哦。不过哪个EAC是怎么来的?
还是说这些寄存器是32位的?
win32是不是有这方面的介绍?
2009-6-5 14:28
0
雪    币: 88
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
DS里面的内容,是程序加载进去后指向数据段的段地址,是由程序控制的。
你可以看下机器码那块有没有?
2009-6-5 14:31
0
雪    币: 54
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
带E的都是32位下的。《Windows环境下32位汇编语言程序设计》是本很好的书。
EAC? 你是说EAX么?
2009-6-5 14:41
0
雪    币: 50
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
od里可以看到ds的值
2009-6-5 22:33
0
雪    币: 129
活跃值: (1095)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
86汇编都快忘完了~~~
2009-6-18 05:32
0
游客
登录 | 注册 方可回帖
返回
//