C++ 嵌套汇编
我自己写了个TSTDLG程序,就一对话框。然后再DLG类里面写了个成员函数
void CTextDlgDlg::Test()
{
MessageBox(m_strRes, "1234565");
}
这个函数调用了下,便于找函数地址
void CTextDlgDlg::OnButton1()
{
// TODO: Add your control notification handler code here
int n = TCYAdd();
m_strRes.Format("%d", n);
Test();
//UpdateData(FALSE);
}
然后我利用远程注入方式,让TSTDLG加载一个动态库。并且成功
动态库加载初始时,我想更具函数地址直接调用这个函数Test。Test的地址为00401570,通过OD找到。
00401541 8BF1 MOV ESI,ECX
00401543 E8 5A040000 CALL <JMP.&FunDll.#1>
00401548 50 PUSH EAX
00401549 8D46 60 LEA EAX,DWORD PTR DS:[ESI+60]
0040154C 68 20304000 PUSH TextDlg.00403020 ; ASCII "%d"
00401551 50 PUSH EAX
00401552 E8 5D020000 CALL <JMP.&MFC42.#2818>
00401557 83C4 0C ADD ESP,0C
0040155A 8BCE MOV ECX,ESI
0040155C E8 0F000000 CALL TextDlg.00401570
00401561 5E POP ESI ; TextDlg.004022F8
00401562 C3 RETN
然后我再DLL中调用如下
BOOL CHOOKDllApp::InitInstance()
{
AfxMessageBox("DLL Load Success");
int p = 00401570;
__asm
{
CALL p;
}
AfxMessageBox("Call End");
return CWinApp::InitInstance();
}
但是没有成功,执行完AfxMessageBox("DLL Load Success");后,没有执行AfxMessageBox("Call End");
请高人指点如何调用!