- 注册时间
- 2013-7-25
- 最后登录
- 1970-1-1
该用户从未签到
|
发表于 2013-7-25 10:45:58
|
显示全部楼层
// test.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
#include <Windows.h>
int _tmain(int argc, _TCHAR* argv[])
{
printf("请输入要获得索引号的函数的名称:\n");
CHAR apiName[256];
scanf("%s",apiName);
//获得函数地址
FARPROC pAddress1 = GetProcAddress(GetModuleHandle(L"ntdll"),(const char*)apiName);
printf("[%s]地址:%X \n",apiName,pAddress1);
//转换成PULONG
PULONG pAddress2 = (PULONG)pAddress1;
//kd> u ntdll!NtCreateFile
//ntdll!NtCreateFile:
//772555c8 b842000000 mov eax,42h
//772555cd ba0003fe7f mov edx,offset SharedUserData!SystemCallStub (7ffe0300)
//772555d2 ff12 call dword ptr [edx]
//772555d4 c22c00 ret 2Ch
//772555d7 90 nop
//(ULONG)pAddress2+1,b8汇编指令为一个字节所以要加1,然后重新转换地址指针
pAddress2 = (PULONG)((ULONG)pAddress2+1);
//*pAddress2表示获得此地址的内容,内容长度为4个字节
printf("[%s]在SSDT表中的索引:%X \n",apiName,*pAddress2);
system("PAUSE");
return 0;
} |
|