首页
社区
课程
招聘
[旧帖] 求助:关于调用Dll函数的问题 0.00雪花
发表于: 2016-5-12 15:50 4502

[旧帖] 求助:关于调用Dll函数的问题 0.00雪花

2016-5-12 15:50
4502
一个Dll,用IDA反汇编后,代码如下:
.text:100669A4 ___DLL__
.text:100669A4                 public ____DLL____
.text:100669A4 ____DLL____     proc near               ; DATA XREF:
.text:100669A4
.text:100669A4 arg_0           = byte ptr  4
.text:100669A4
.text:100669A4                 push    esi
.text:100669A5                 push    edi
.text:100669A6                 push    ebx
.text:100669A7                 lea     esi, [esp+0Ch+arg_0]
.text:100669AB                 sub     esp, 0Ch
.text:100669AE                 mov     edi, esp
.text:100669B0                 cld
.text:100669B1                 mov     ecx, 3
.text:100669B6                 rep movsd
.text:100669B8                 call    sub_10001021
.text:100669BD                 pop     ebx
.text:100669BE                 pop     edi
.text:100669BF                 pop     esi
.text:100669C0                 retn    0Ch
.text:100669C0 ____DLL____     endp
按F5,得出源码如下:
int __stdcall ___DLL__(char a1, int a2, int a3)
{
  int v4; // [sp-Ch] [bp-18h]@1
  int v5; // [sp-8h] [bp-14h]@1
  int v6; // [sp-4h] [bp-10h]@1

  qmemcpy(&v4, &a1, 0xCu);
  return sub_10001021(v4, v5, v6);
}
写一段代码,调用上面DlL中的函数:
#include "stdafx.h"
#include "windows.h"
int main(int argc, char* argv[])
{
        HMODULE hModule=LoadLibrary("tlfn.dll");
        typedef int (*ppp)(char,int,int);
        ppp hDll = (ppp)GetProcAddress(hModule, MAKEINTRESOURCE(1));
//        ppp hDll = (ppp)GetProcAddress(hModule, "钩子DLL接口");
        int a=hDll('a',22,33);
        FreeLibrary(hModule);
        return 0;
}
听得一声“PIU”,崩了,大神,请指点迷津!!!(已百撕仅见内内)
附件如下: tlfn.rar

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 12354
活跃值: (5123)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
来学习的,对面DLL不懂
2016-5-12 16:40
0
雪    币: 123
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
中文的函数名,是易语言?
2016-5-12 19:48
0
雪    币: 36
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
qmemcpy(&v4, &a1, 0xCu); 堆栈溢出吧
2016-5-14 18:23
0
雪    币: 101
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
int v4; // [sp-Ch] [bp-18h]@1
  int v5; // [sp-8h] [bp-14h]@1
  int v6; // [sp-4h] [bp-10h]@1

  qmemcpy(&v4, &a1, 0xCu);
  return sub_10001021(v4, v5, v6);

('a',22,33) 是不是传入的参数不合法,报什么错误啊
2016-5-15 09:29
0
雪    币: 36
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
我在调用DLL时候各种卡死,后来换了一种写法
.版本 2

.DLL命令 _动态调用子程序3, 整数型, , "CallWindowProcA"
    .参数 DefWindowProc, 字节集
    .参数 hWnd, 整数型
    .参数 Msg, 文本型
    .参数 wParam, 整数型
    .参数 lParam, 整数型
动态调用码:{85,139,236,86,139,117,16,141,78,255,133,201,124,21,139,69,12,141,4,136,65,139,16,137,85,16,255,117,16,131,232,4,73,117,242,255,85,8,137,69,12,139,69,20,133,192,116,13,141,4,181,0,0,0,0,137,69,16,3,101,16,139,69,12,94,93,194,16,0}放到第一个参数
2016-5-25 22:51
0
雪    币: 231
活跃值: (2631)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
7
typedef int (__stdcall *ppp)(char,int,int);
2016-5-25 23:14
0
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
下载个汇编查找器看一下嘛,这个不难。
2016-5-26 09:25
0
雪    币: 237
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
易语言编译的程序比较另类。

.text:100669A4                 public ____DLL____
.text:100669A4 ____DLL____     proc near            
.text:100669A4
.text:100669A4 a1              = dword ptr  4
.text:100669A4 a2              = dword ptr  8
.text:100669A4 a3              = dword ptr  0Ch
.text:100669A4
.text:100669A4                 push    esi
.text:100669A5                 push    edi
.text:100669A6                 push    ebx

.text:100669A7                 lea     esi, [esp+0Ch+a1]
.text:100669AB                 sub     esp, 0Ch
.text:100669AE                 mov     edi, esp
.text:100669B0                 cld
.text:100669B1                 mov     ecx, 3
.text:100669B6                 rep movsd
.text:100669B8                 call    sub_10001021

.text:100669BD                 pop     ebx
.text:100669BE                 pop     edi
.text:100669BF                 pop     esi
.text:100669C0                 retn    0Ch
.text:100669C0 ____DLL____     endp

.text:10001021 sub_10001021    proc near            
.text:10001021
.text:10001021 arg_0           = dword ptr  8
.text:10001021 arg_4           = dword ptr  0Ch
.text:10001021 arg_8           = dword ptr  10h
.text:10001021
.text:10001021                 push    ebp
.text:10001022                 mov     ebp, esp
.text:10001024                 sub     esp, 4
.text:1000102A                 push    offset sub_1000CA09
.text:1000102F                 push    offset sub_10015C0D
.text:10001034                 push    [ebp+arg_8]
.text:10001037                 push    [ebp+arg_4]
.text:1000103A                 push    [ebp+arg_0]
.text:1000103D                 call    sub_1000106D
.text:10001042                 jmp     $+5

.text:10001047
.text:10001047 loc_10001047:                          
.text:10001047                 mov     esp, ebp
.text:10001049                 pop     ebp
.text:1000104A                 retn    0Ch
.text:1000104A sub_10001021    endp
2016-6-14 17:39
0
雪    币: 39
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
会不会是3个INT,RET 000C 应该是用3个4字节的参数
2016-6-17 16:23
0
游客
登录 | 注册 方可回帖
返回
//