我想鉤一個C++函數。但我不想使用ms distort的蹦牀機制,而不是我想完全修補它。我可以得到函數所在的DLL的句柄,並且我有正確的偏移量(imageBase的東西...)。那麼如何掛鉤呢?我不知道參數的數據類型(var_4和arg_0),還是不需要它們?總的來說,我想替換下我自己的一個功能(我的功能幾乎是一樣的,有隻改線):如何掛鉤C++函數與asm
sub_39001A40 proc near
var_4 = dword ptr -4
arg_0 = dword ptr 4
push ecx
cmp dword_392ADAB4, 0
jnz short loc_39001A4F
call loc_39024840
loc_39001A4F:
push esi
mov esi, [esp+8+arg_0]
lea eax, [esp+8+var_4]
push eax
push esi
call dword_392ADA98
mov ecx, [esp+10h+var_4]
add esp, 8
add dword_392ADA80, ecx
adc dword_392ADA84, 0
add dword_392ADA90, esi
pop esi
adc dword_392ADA94, 0
add dword_392ADA7C, 1
pop ecx
retn
sub_39001A40 endp
它的壞,我只能掛接函數,我知道有MS檢測,其名少走彎路。我無法將這些asm函數掛鉤,因爲我需要爲創建函數結構傳遞參數的數據類型!
編輯::::
「有什麼不好的彎路,到底是什麼?」
我寫道:「我不想用ms蹦牀的蹦牀機制,而不是我想完全修補它。」和「這很糟糕,我只能使用hook函數,這些函數的名字是我用ms detours所知道的,我不能使用繞行函數來掛接這些asm函數,因爲我需要爲創建函數結構傳遞的參數的數據類型!而我沒有C++文件的源代碼。我只有十六進制轉儲。
「蹦牀是一個實際的術語:)我只是想知道爲什麼@lua不能使用它。」
我寫:再讀一遍我的句子,如果你還不明白爲什麼,我的英文不好。
「重寫只是命名函數應該工作,當然你可能需要重新實現整個DLL(取決於它是否對你有任何進一步的用處)。給定你對彙編器的掌握,你可能會忽略使用一個十六進制編輯器來編輯(你想要顛覆的)原始DLL的副本。「
我想掛鉤函數,因爲我不想編輯文件。我不能覆蓋我的函數,因爲我不知道參數和函數名稱的數據類型。
@asveikau:感謝您的真正幫助,但我不想使用蹦牀機制,我想覆蓋該功能。
走彎路有什麼問題呢? – bdonlan
@bdonlan,我在這裏顯然低估了lua。我雖然蹦牀被用來作爲毫秒機制膨脹的貶義詞。似乎彎路實際上是一個我一無所知的着名程序。 – John
蹦牀是一個實際的術語:)我只是想知道爲什麼@lua不能使用它。 – bdonlan