注册 登录
编程论坛 汇编论坛

反汇编的一些疑问 [

ltaotao007 发布于 2008-05-24 22:05, 984 次点击
问题有点多,希望DD们不吝指教

1 基址是什么?是数据段基地址么(这里主要是讨论数据)。如果是这样的,为什么
一般反汇编的数据基本是这种格式
[[[12F82C]+28]+240]
我的理解是(不知对否,请指点)

12F82C是数据段基址
28为数据或结构体,开始地址
240为索引值

以上三个值,是在编译时已固定,当程序载入不同机器时,windows会在内存中分配相应开始地址,但对数据基址,这些没有影响??
以上三个值,是以结构休或者数据的存储方式,如果是单个变量的话,对导址方式一般应该为  [[12F82C]+偏移]  ???

数据段基址不一定是EDX,可能是在ESI,ESP中?
数据段基址只会有一个么,还是多个呢?

2 在反汇编中,函数地址不定是在代码段ECS中吗?如果是这样,函数入口参数,数据变量是存储在那里的呢?是在数据段中,还是栈,堆中?是要看数据
变量是全局还是,局部变量吗?


3 程序运行时,每当进入一个函数,基址指针就指向该函数的栈起始地址,以后在函数运行周期内不再变化;
变址指针在函数栈内移动,访问函数内各变量
  这句话怎么样理解?  函数每次运行的时候,函数内的变址会变么?
1 回复
#2
2008-06-19 05:14
你的问题还真多啊

如果是WINDOWS32, API函数以系统提供DLL的方式引入,在程序被装入内存时进行动态的映射进EXE里. 需要根据函数名表来动态填充IAT表.

如果是程序本身自己的子程序或自己的函数,调用时,入栈后,ESP指栈顶,EBP取参数,函数内的参数的地址相对与函数入栈时的起始地址来讲,是不变的.   你的表述都是似是而非... 也可能我对你的表述理解有误.  

从你的问题来看,应该是不了解可执行文件的格式,仅仅是从源代码到反汇编代码之间的猜测,     实际上在可执行文件格式这一层上,已经对组织形式做了详细的规定.
1