dzpos 发表于 2022-5-27 09:19

求助一个dll函数参数问题

求助 dll文件,通过 dumpbin.exe 能查询到 函数名 setupdate(),参数,不能确定。返回值 应该是一个字符串。现在使用易语言可以加载dll进去,但是无法调用函数。形参和实参怎么能知道?

苏紫方璇 发表于 2022-5-27 09:19

感觉是这样的

.版本 2

.DLL命令 SetupDate, 整数型, "setup.dll", "SetupDate", 公开
    .参数 lpStr, 文本型, 传址
    .参数 size, 整数型



.版本 2

.程序集 窗口程序集_启动窗口

.子程序 _按钮1_被单击
.局部变量 str, 文本型

str = 取空白文本 (255)
SetupDate (str, 255)
输出调试文本 (str)

pzx521521 发表于 2022-5-27 09:39

没有办法知道
正常类型如char string int double etc...一个一个试一下
如果不行就是一个struct 就可以放弃了

dzpos 发表于 2022-5-27 09:40

所需要的 dll文件 百度网盘地址:链接:https://pan.baidu.com/s/1R8G8fmMdKPZZt4PCMyii1g
提取码:vow3

万神fake 发表于 2022-5-27 10:40

用ida反编译

万神fake 发表于 2022-5-27 10:49

int __stdcall SetupDate(int a1, rsize_t SizeInBytes)
{
struct AFX_MODULE_STATE *v2; // eax
int v3; // eax
int v4; // eax
char v5; // al
int v6; // esi
const char *v7; // eax
DOUBLE pvtime; // BYREF
int v10; //
__time64_t v11; // BYREF
char *Destination; //
int v13; // BYREF
struct _SYSTEMTIME v14; // BYREF
struct _SYSTEMTIME v15; // BYREF
char v16; // BYREF
char *Source; // BYREF
rsize_t MaxCount; //
unsigned int v19; //
struct _SYSTEMTIME SystemTime; // BYREF

Destination = (char *)a1;
v2 = AfxGetModuleState();
AFX_MAINTAIN_STATE2::AFX_MAINTAIN_STATE2((AFX_MAINTAIN_STATE2 *)v13, v2);
v11 = _time64(0);
pvtime = 0.0;
v10 = 0;
if ( !(unsigned __int8)sub_10003E00() || (v3 = sub_10003E70(&SystemTime, &pvtime), v10 = 0, !v3) )
    v10 = 1;
v4 = sub_10006264();
if ( !v4 )
    sub_100045B0(-2147467259);
LODWORD(v11) = (*(int (__thiscall **)(int))(*(_DWORD *)v4 + 12))(v4) + 16;
if ( !v10 )
    VariantTimeToSystemTime(pvtime, &SystemTime);
if ( !v10 )
    VariantTimeToSystemTime(pvtime, &v14);
if ( v10 || !VariantTimeToSystemTime(pvtime, &v15) )
    v5 = -1;
else
    v5 = v15.wYear;
sub_10003DE0((int)&v11, "%d-%02d-%02d", v5);
v6 = v11;
SystemTime.wMonth = 13632;
SystemTime.wDayOfWeek = 6265;
strcpy((char *)&SystemTime.wDay, "<M");
SystemTime.wYear = 24175;
sub_100037F0(v16, (void *)v11);
v7 = Source;
if ( v19 < 0x10 )
    v7 = (const char *)&Source;
strncpy_s(Destination, SizeInBytes, v7, MaxCount);
if ( v19 >= 0x10 )
    operator delete(Source);
v19 = 15;
MaxCount = 0;
LOBYTE(Source) = 0;
if ( _InterlockedDecrement((volatile signed __int32 *)(v6 - 16 + 12)) <= 0 )
    (*(void (__thiscall **)(_DWORD, int))(**(_DWORD **)(v6 - 16) + 4))(*(_DWORD *)(v6 - 16), v6 - 16);
if ( v13 )
    sub_100058A3(0, v13);
return 1;
}

ps122 发表于 2022-5-27 11:08

本帖最后由 ps122 于 2022-5-27 11:48 编辑

楼上的大佬们好厉害,学习了{:1_921:}

dzpos 发表于 2022-5-27 15:40

苏紫方璇 发表于 2022-5-27 10:57
感觉是这样的

.版本 2


感谢大佬,大佬就是大佬。
页: [1]
查看完整版本: 求助一个dll函数参数问题