反汇编的一些疑问 [
问题有点多,希望DD们不吝指教1 基址是什么?是数据段基地址么(这里主要是讨论数据)。如果是这样的,为什么
一般反汇编的数据基本是这种格式
[[[12F82C]+28]+240]
我的理解是(不知对否,请指点)
12F82C是数据段基址
28为数据或结构体,开始地址
240为索引值
以上三个值,是在编译时已固定,当程序载入不同机器时,windows会在内存中分配相应开始地址,但对数据基址,这些没有影响??
以上三个值,是以结构休或者数据的存储方式,如果是单个变量的话,对导址方式一般应该为 [[12F82C]+偏移] ???
数据段基址不一定是EDX,可能是在ESI,ESP中?
数据段基址只会有一个么,还是多个呢?
2 在反汇编中,函数地址不定是在代码段ECS中吗?如果是这样,函数入口参数,数据变量是存储在那里的呢?是在数据段中,还是栈,堆中?是要看数据
变量是全局还是,局部变量吗?
3 程序运行时,每当进入一个函数,基址指针就指向该函数的栈起始地址,以后在函数运行周期内不再变化;
变址指针在函数栈内移动,访问函数内各变量
这句话怎么样理解? 函数每次运行的时候,函数内的变址会变么?
如果是WINDOWS32, API函数以系统提供DLL的方式引入,在程序被装入内存时进行动态的映射进EXE里. 需要根据函数名表来动态填充IAT表.
如果是程序本身自己的子程序或自己的函数,调用时,入栈后,ESP指栈顶,EBP取参数,函数内的参数的地址相对与函数入栈时的起始地址来讲,是不变的. 你的表述都是似是而非... 也可能我对你的表述理解有误.
从你的问题来看,应该是不了解可执行文件的格式,仅仅是从源代码到反汇编代码之间的猜测, 实际上在可执行文件格式这一层上,已经对组织形式做了详细的规定.
页:
[1]
