S
seeip
Unregistered / Unconfirmed
GUEST, unregistred user!
现有一个VC++的DLL,
myfunc(char* szPlantext,int iLen_in,char* szKey, int iLen_out, char* szCiphertext)
第一个参数是明文字符串的地址指针,第二个参数是要加密的明文的长度,第三个是密钥字符串的地址指针,第四个是密文的长度,第五个参数是保存加密后的字符串的缓冲区地址。
. 8D85 EEF7FFFF lea eax, [ebp-812]
. 50 push eax ;空内容;存放结果
. 56 push esi ;EAX长度
. 8D85 EDF3FFFF lea eax, [ebp-C13] :ASCII'ABCD1234',这里是密钥;
. 50 push eax
. 57 push edi ;EAX长度
. 8D85 EFFBFFFF lea eax, [ebp-411] ;ASCII'123456789'明文
. 50 push eax
. E8 8604FFFF call <jmp.&dll.myfunc> 这里是调用了DLL
在DELPHI下,调用过程如下:
function myfunc(minchar; mi:integer;keychar; ki:integer; schar)char ;stdcall; external 'mydll.dll'
现在的问题是,并不能给出正确的密文.
反汇编后是下面的形式.
|. 50 push eax
|. 8B45 F0 mov eax, [ebp-10]
|. 50 push eax
|. 56 push esi
|. 57 push edi
|. 53 push ebx
问题:1)怎么会出现调用时,一个是PUSH 时,都是EAX ,我重新写的怎么都会一个接一个的PUSH呢?
问题:2)下面的这两句的区别?
function myfunc(minchar; .............
function myfunc(VAR minchar;..........
问题3)如果是在DELPHI中嵌入汇编如何实现以上调用.
myfunc(char* szPlantext,int iLen_in,char* szKey, int iLen_out, char* szCiphertext)
第一个参数是明文字符串的地址指针,第二个参数是要加密的明文的长度,第三个是密钥字符串的地址指针,第四个是密文的长度,第五个参数是保存加密后的字符串的缓冲区地址。
. 8D85 EEF7FFFF lea eax, [ebp-812]
. 50 push eax ;空内容;存放结果
. 56 push esi ;EAX长度
. 8D85 EDF3FFFF lea eax, [ebp-C13] :ASCII'ABCD1234',这里是密钥;
. 50 push eax
. 57 push edi ;EAX长度
. 8D85 EFFBFFFF lea eax, [ebp-411] ;ASCII'123456789'明文
. 50 push eax
. E8 8604FFFF call <jmp.&dll.myfunc> 这里是调用了DLL
在DELPHI下,调用过程如下:
function myfunc(minchar; mi:integer;keychar; ki:integer; schar)char ;stdcall; external 'mydll.dll'
现在的问题是,并不能给出正确的密文.
反汇编后是下面的形式.
|. 50 push eax
|. 8B45 F0 mov eax, [ebp-10]
|. 50 push eax
|. 56 push esi
|. 57 push edi
|. 53 push ebx
问题:1)怎么会出现调用时,一个是PUSH 时,都是EAX ,我重新写的怎么都会一个接一个的PUSH呢?
问题:2)下面的这两句的区别?
function myfunc(minchar; .............
function myfunc(VAR minchar;..........
问题3)如果是在DELPHI中嵌入汇编如何实现以上调用.