windows下有什么方法可以得到程序的加载地址

windows下有什么方法可以得到程序的加载地址,第1张

好久没回答问题了 尝试一下

打开文件的办法

CHAR lpExeFilename[MAX_PATH] = ""

HINSTANCE hInstance = GetModuleHandle(NULL)

GetModuleFileName(hInstance, lpExeFilename, MAX_PATH)

HANDLE hFile = CreateFile(lpExeFilename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTES_NORMAL, NULL)

//todo:判断是否打开成功

CHAR lpBuffer[100]

ReadFile(hFile, ...)

//todo:处理固定偏移

CloseHandle(hFile)

以上是比较稳妥的办法 事实上如果对于进程的创建有一定理解的话

就应该知道GetModuleHandle(NULL)调用返回的就是进程文件加载到内存的地址

完全可以这样得到首地址:

LPCSTR lpcBuffer = (LPCSTR)GetModuleHandle(NULL)

然后lpcBuffer[1] 就是你说的0x000000001了

手头没有调试器 个别地方可能有笔误 见谅

一、需要的API函数分步阅读

1

/2

LoadLibrary函数的声明如下,它只有一个参数,指明要加载的动态库。

2

/2

GetProcAddress函数的声明如下,它有两个参数,一个是LoadLibrary函数返回的模块句柄,一个是要获取的函数名称。

二、动态加载动态库的实例

1

/7

这里以user32.dll中的MessageBox函数为例,开发环境使用vs2017。首先点击“文件”——“新建”——“项目”建立一个win32控制台程序。

2

/7

正常的使用MessageBox代码如下,直接调用即可。

//vs2017中的代码

#include <tchar.h>

#include <windows.h>

int main(){

MessageBox(0, _T("hello world!"), _T("MessageBox"), MB_OK)

return 0

}

3

/7

如果使用动态加载,则需要首先用LoadLibrary函数加载user32.dll。

4

/7

然后定义一个函数指针类型,用定义的函数指针类型定义函数指针。用于保存GetProcAddress()获取的MessageBox函数地址。

5

/7

然后通过GetProcAddress()获取其函数地址。

6

/7

最后通过函数指针调用MessageBox()函数即可。

这又是流氓网页

删除开机运行的网页:

用Msconfig来屏蔽,但注册表还是残留它的,建议用注册表编辑器

进入注册表编辑器(开始—运行—输入regedit—回车)

逐项进入分支:

HKEY_CURRENT_USER

-Software

--Microsoft

---Windows

----CurrentVersion

-----Run

看Run里面(右侧窗口里)有没有这个网页,(我的经验,键值一般是%system%什么什么的)有就删除

另外在HKEY_LOCAL_MACHINE的相同分支下,也有Run,必须也要看看!

恢复被修改的网页:

使用注册表吧,点开始--运行--输入regedit--回车

依次打开:

HKEY_CURRENT_USER

--SOFTWARE

----Microsoft

------Internet Explorer

--------Main

里面,你能看到许多地址,里面肯定有你要去掉的那个烦人的URL

你可以将它改成默认的空白页

例如:

双击Start Page,将值改为你所要设置的网站或者空白页

空白页可以用:%SystemRoot%\system32\blank.htm

或者about:blank

另外,在HKEY_LOCAL_MACHINE里的相同子路径下,也有这个Main

也要修改的


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12116112.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存