我正在爲somthing(我無法訪問源代碼)插入並遇到問題。以下程序集摘錄來自主程序,並且是負責調用我的代碼的過程的開始(整個代碼非常長,因爲它非常通用,可以調用任何函數,最多16個參數相關的字符串內存管理,並支持__stdcall或__cdecl)。不幸的是,一個非常重要的值不是通過這個函數傳遞給我的代碼,這個「this」指針保存在edx寄存器中。將代碼注入到現有的已編譯模塊中
所以我需要在這個函數的開始部分注入某些代碼(提供的API允許我獲取它的地址,在這種情況下爲0x00613ED4),它會將值存儲在edx寄存器中以供我檢索後來。
我之前完成了一些x86程序集,但是我從來不需要在運行時將新代碼注入到現有模塊中,並且我無法找到關於如何去做這些事情的任何信息:(如果這樣的事情實際上可以從C/C++內部沒有我不得不寫在裝配的所有的東西,甚至會更好。
00613ED4 push ebp
00613ED5 mov ebp,esp
00613ED7 add esp, 0FFFFFE64h
00613EDD push ebx
00613EDE push esi
00613EDF push edi
00613EE0 mov dword ptr [ebp-19Ch],ecx
00613EE6 mov ecx,11h
00613EEB lea eax, [ebp-198h]
...
當時就在想,如果我可以把財產以後到JMP莫名其妙地話,我可以把我的代碼在別的地方,不管我重寫了什麼,然後跳回到下一條指令?不應該太昂貴,特別是它坐在旁邊的腳本解釋器比較:p在如何實際編寫代碼,雖然做替換有一些麻煩...... – Will