說說改函數功能特點如下:
該函數為本人親身經驗制作,能對符合妳的CALL的要求,但請註意,該函數有對妳的要求的代碼
進行了相關的簡化操作,下面指出簡化說明:
mov
eax,dword
ptr
ss:[ebp+0xC]
mov
ecx,dword
ptr
ss:[ebp+0x8]
目標需要的是作為參數使用,而要求在這裏使用寄存器進行傳遞,緊接下來的
push
eax
push
ecx
已經證實我的說法
而
mov
ecx,(這裏是基址8A8240+70+1c8)
就確實是需要使用ECX寄存器來傳遞,所以,貼出的代碼中沒有對這裏進行簡化,因為這是必要動作
另外,妳這裏在復制給ECX前有個計算動作,而我封裝的代碼不負責計算,這樣做的好處就是,將計算
的動作交給妳自己在IDE中進行設計,妳只需要把計算結果作為本函數的參數即可!
如果妳對這段計算的意義不太了解,可以繼續問我.
call
004368f0
這裏用的是直接尋址,如果我原本照寫的話,將不利於妳對代碼的維護和更新
考慮到維護和更新,特此封裝為函數,在call
004368f0
這裏改用間接尋址!
因本人有2年開發WG經驗,這個封裝好的函數不需要使用任何模塊,更新維護更加簡單方便,
並且能適用類似的CALL的使用,函數執行速度快,因為不像第三放模塊那樣重新開辟壹段內存,
然後把代碼寫入內存,然後再CALL內存地址,然後再釋放內存,然而光是這樣的操作就失去了效率,
更別說如果出現其他異常,這段內存就有可能泄露!
當然,有些模塊可以使用調用CALL後將返回值返回給IDE其實,這個也是可以不用模塊實現的!
然而考慮到妳這個CALL的返回值可能不存在意義,我就懶得去搞了!
代碼註釋中帶$字符後面的內容為十六進制
*******************************************代碼段開始
.版本
2
.子程序
Call走路
.參數
Call走路地址,
整數型
.參數
ecx要求的地址,
整數型,
,
mov
ecx,(這裏是基址8A8240+70+1c8)
.參數
參數1,
整數型
.參數
參數2,
整數型
置入代碼
({
96
})
'
pushad
'暫存寄存器,防止被Call的函數因對寄存器的操作引發其他錯誤
'
壓入本函數中的第四個參數作為目標函數的第二個參數
置入代碼
({
255,
117,
20
})
'
push
dword
ptr
[ebp+$14]
'
壓入本函數中的第三個參數作為目標函數的第壹個參數
置入代碼
({
255,
117,
16
})
'
push
dword
ptr
[ebp+$10]
'
mov
ecx,(這裏是基址8A8240+70+1c8)
置入代碼
({
139,
77,
12
})
'
mov
ecx,[ebp+$0c]
'
call
$004368f0
註:這裏並不是直接尋址,而是間接尋址
置入代碼
({
255,
85,
8
})
'
call
dword
ptr
[ebp+$08]
置入代碼
({
97
})
'
popad
*******************************************代碼段結束
采納答案是必須的了,這經驗指導用錢買不到,記得點贊同!