好久没写博客了,最近想抽点时间补上之前的东西,有些东西要记录下来,以后看了会觉得很有意思。
这个小工具没有什么可以说的,直接vc编译连接就可以用了。下面附上代码:
#include "stdio.h"
#include <Windows.h>
int main()
{
printf("请输入要获得索引号的函数的名称:\n");
CHAR apiName[256];
scanf("%s",apiName);
//获得函数地址
FARPROC pAddress1 = GetProcAddress(GetModuleHandle("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;
}
其实短短几行代码,但本菜鸟觉得还是挺好用的。呵呵
菜鸟言论仅供娱乐。