【200分】征给内嵌机器指令的内存块设置可执行的代码
就是使用了类似下面的方式做的特殊功能,因默认肯定是没这个"内存块可执行的",编译后在默认DEP数据执行保护打开的系统,如WIN2003中运行有困难.网友给了帮助说要调用相应的API将内存块设置为可执行的,但毕竟自己没做过,所以请大家提供尽可能接近最终VB6中可马上用的代码,谢谢:)
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" _ (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, _ ByVal wParam As Long, ByVal lParam As Long) As LongPrivate Sub Command1_Click()Dim Asm(12) As Byte Asm(0) = &H58 'pop eax Asm(1) = &H59 'pop ecx Asm(2) = &H59 'pop ecx Asm(3) = &H59 'pop ecx Asm(4) = &H59 'pop ecx------->VarPtr(Asm(0))输出参数 Asm(5) = &H50 'push eax------>下一条指令地址入栈 '==============要嵌入的代码 Asm(6) = &HC6 '- Asm(7) = &H1 ' > mov byte ptr[ecx],0 即asm(0)=1 Asm(8) = &H1 '- Asm(9) = &HC0 '- Asm(10) = &H21 ' > sal byte ptr[ecx],3 即asm(0)左移3位 Asm(11) = &H3 '- '==============要嵌入的代码 Asm(12) = &HC3 'ret------>下一条指令地址出栈 CallWindowProc VarPtr(Asm(0)), 0, 0, 0, VarPtr(Asm(0)) 'VarPtr(Asm(0)输出参数 '第一个压入堆栈,最后一个弹出 '参数入栈顺序为从右到左 MsgBox Asm(0) '输出8 '要嵌入机器码,首先需要用工具软件将汇编指令转成机器码,如OllyICEEnd Sub