首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

帮忙解释停这个代码,最好懂VB的

2013-03-26 
帮忙解释下这个代码,最好懂VB的void LLLL(){DWORD l//AllocConsole()BYTE *p (BYTE*)GetProcAddress(G

帮忙解释下这个代码,最好懂VB的
void LLLL()
{
DWORD l;
//AllocConsole();
BYTE *p = (BYTE*)GetProcAddress(GetModuleHandle("yb_mem.dll"), "DiffieEncrypt");
VirtualProtect((void *)p, 0x200, PAGE_EXECUTE_READWRITE, &l);

*p = 0xe9;
*(DWORD *)(p + 1) = ((DWORD)dididi) - (DWORD)p - 5;


}
从这里看,是取得模块的函数基址是吧,然后再相应地方写入0xe9;这样的数值,因为我对C++完全不懂,看不出来P既然是获得的地址,怎么又能*p = 0xe9;按我理解这是个4字节的数字。
执行这里更看懂了。dididi全代码里还有一个,就是
int __stdcall dididi(void *src, int size, void *tgt, int size1)
{
memcpy(tgt, src, size);
return size;
}
但是执行这里没有传入参数。而且全部代码也找不到跟这些传入参数有关的。
大致意思应该是取得模块的函数基址,更新地址权限,然后在什么地方写入什么内容。
最重要的是告诉我在什么地方写了什么。另外VB怎么取函数基址,我取得的跟模块的基址完全一样。
(没分了我先問,回复我会加分的)
[解决办法]
*p = 0xe9;
p是指针,给他赋值是可以的。这个是给第一个字节赋值
p[0];
[解决办法]
五六年没有碰VB了,忘得差不多了。楼主可以把代码贴到VB区。从上面的代码看,改写成VB是不存在问题的。
1. l和p定义为long类型
2. 如果没有加载这个DLL,需要通过LoadLibrary加载
3. GetProcAddress这个不用多解释直接按这个写就OK,甚至这一行代码几乎可以直接拷贝(语法修正即可)
4. p是一个BYTE类型的指针,可以通过CopyMemory写入一个字节(Byte)到p指针指向的内存当中去
5. 先通过AddressOf取得函数dididi的首地址,其他该计算的计算,然后再计算出p+l的值,交给CopyMemory

这份代码其实只是片段,如果单纯处理这个片段不会有任何用处。

热点排行