大家有没有遇到WIN7下有此程序运行后基址变化的问题,找了几天资料知道原因,但是还是没有达到我要求,求指点》》

时间:2023-01-15 04:53:37
WIN7下有此程序运行后基址变化的原因,我一直以为是WIN7独特的内存分配方式,其实说不定我错怪它了。呵呵

昨天我看到看雪里一贴,说是编译器的问题,是比如我用VS2012,链接选项里有一个高级选项--取消掉”随机基址“,果然可以了。

我的问题,这样固然程序老实了。但是如果写游戏外挂就麻烦了,如果我写个补丁什么的,人家可不一定用这个选项编译链接。所以我得想个办法 弄到程序 映象 进入内存的首地址。我想到 GetModualHandle 了。


我是菜菜,请教一下:

1.GetModualHandle 如果获得一个应用程序 如 E:\vs2012pj\zonjipian\211\2-1-1\debug\2-1-1.exe  进入内存后 主模块的地址? 
====================
//下面这个函数老是报 找不到模块名字 
HMODULE FindIMAGEBASE()
{
 
//原形:HMODULE GetModuleHandle( LPCTSTR lpModuleName);  
//char* p_game="2-1-1.exe";-------------------------------------------------A
//LPCTSTR lps ="E:\vs2012pj\zonjipian\211\2-1-1\debug\2-1-1.exe"; ----------B
// const char p[200] ="D:\\2-1-1.exe";后来实在没办法把文件拷到一个简单的目录也不行--C

const char* p ="E:\\vs2012pj\\zonjipian\\211\\2-1-1\\Debug\\2-1-1.exe";------D

HMODULE my_imageBase;
my_imageBase= GetModuleHandle(p);
//int q=GetLastError();   不管是A B C D 全报126错误,找不到指定模块!
return my_imageBase;
}


不管是A B C D 全报126错误,找不到指定模块!求解

3 个解决方案

#1


getmoudlehander 这个函数 是不是 只能获得自己模块的地址,根本没有能力获得别的程序的模块地址? 今天下午问了一个群里的朋友,他的意思是这样。 他说除非注入别的程序。。。? 是不是这个意思?

#2


我现在用远程注入的方法解决了,但是有没有更简单的方法?
一句话

getmoudlehander 这个函数 是不是 只能获得自己模块的地址,根本没有能力获得别的程序的模块地址?

谢谢

#3


版本不一样,基址也不同,32位和64位也有差异。

#1


getmoudlehander 这个函数 是不是 只能获得自己模块的地址,根本没有能力获得别的程序的模块地址? 今天下午问了一个群里的朋友,他的意思是这样。 他说除非注入别的程序。。。? 是不是这个意思?

#2


我现在用远程注入的方法解决了,但是有没有更简单的方法?
一句话

getmoudlehander 这个函数 是不是 只能获得自己模块的地址,根本没有能力获得别的程序的模块地址?

谢谢

#3


版本不一样,基址也不同,32位和64位也有差异。