如果确定运行程序中的数据内存的绝对地址(200分)

  • 主题发起人 主题发起人 samxu
  • 开始时间 开始时间
S

samxu

Unregistered / Unconfirmed
GUEST, unregistred user!
运行程序,我用FPE查找出一个数据的内存地址,譬如说是00102266,
为什么每次启动该程序后,该数据的内存地址(变成001022ab)都有变化,
请问如何计算该程序运行后内存地址。
最好能给出源码,分可以再加。谢谢!
 
应该用 VA ,和程序装入地址的距离是不变的。
绝对地址恐怕比较困难。
 
我看不对呀,应该地址是一样的,
 
to:jsxjd
那如何知道程序的装入地址呢??谢了!
 
EXE的实例句柄就是他装入的逻辑地址!
 
当以LOAD_LIBRARY_AS_DATAFILE的方式调用LoadLibraryEx时,系统只是简单地创建
一个文件映象对象,把DLL(EXE)映射到本进程的地址空间,并不调用DllMain(WinMain)。
如果调用成功,则函数返回一个HINSTANCE,即被映射到本进程地址空间的DLL(EXE)的
装入地址.
 
在WIN下:
数据内存的绝对地址,用DELPHI不太可能!
就算是是ASM都要很深的功底!
找找有什么工具吧!
 
是不是该数据内存地址跟程序运行后的某一个参数的值有一定的关系,通过这个参数可
以确定该数据的内存地址。
该数据内存地址=参数(比如是初始装入地址)+偏移量
请问我如何求得这个参数。
其实我的意思是就是这样的:写一个监视程序,监视另一个程序运行后的某个数据的变化
情况。
 
菜单'project'、'Options'、'Linker',其中的 Image Base 就是在Delphi 中指定的
默认装载地址,但实际装载时可能不一致。

以下获得程序的装载地址。
procedure TForm1.Button1Click(Sender: TObject);
var
p:pointer;
begin
p:=pointer(getmodulehandle(nil));
showmessage('程序装载地址:0x'+trim(inttohex(integer(p),8)));
end;
 
TO:jsxjb:
你的哪个P得到的就是这个EXE的实例句柄,呵呵
 
后退
顶部