搜索
bottom↓
回复: 6

怎样获取动态库的函数参数列表

[复制链接]

出0入8汤圆

发表于 2017-12-28 15:25:01 | 显示全部楼层 |阅读模式
首先用defend查看dll的函数列表(不含参数),

然后看了网上的一个帖子说可以获取参数,试了下没什么效果:
// ConsoleApplication_jlinkArm.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "windows.h"

#define DllImport   __declspec( dllimport )

#define DllExport   __declspec( dllexport )

#pragma  comment(lib, "JLinkARM.dll")

DllExport void func();

DllExport int i = 10;

DllExport int j;

DllExport int n;

int _tmain(int argc, _TCHAR* argv[])
{
    HINSTANCE hinstanbceLib = LoadLibrary("JLinkARM.dll");

    void  *dllFunction = GetProcAddress( hinstanbceLib, MAKEINTRESOURCE(2) );


        return 0;
}

教程上说把程序运行到dllFunction ,然后鼠标放上去就可以显示出来了,其实只显示了个地址,根本就没有显示函数名和参数列表

出0入442汤圆

发表于 2017-12-28 15:29:19 来自手机 | 显示全部楼层
不好意思,这个列表是真没机会拿到,因为dll里面进来之后只有push/pop类的操作,来申请栈空间。你要找到[sp+n]的地方。另外,你可以试试IDA,直接produce c,然后在生成的c代码里面找参数(破解利器啊,用好了分分钟破解软件)

出0入8汤圆

 楼主| 发表于 2017-12-28 15:31:20 | 显示全部楼层
wye11083 发表于 2017-12-28 15:29
不好意思,这个列表是真没机会拿到,因为dll里面进来之后只有push/pop类的操作,来申请栈空间。你要找到[sp ...

没用过  能否给发下

出0入8汤圆

发表于 2017-12-28 20:08:25 来自手机 | 显示全部楼层
关注一下

出0入8汤圆

 楼主| 发表于 2018-1-2 10:18:20 | 显示全部楼层
可以正确的读取芯片共享的内存的里面的值了,

// ConsoleApplication_jlinkArm.cpp : 定义控制台应用程序的入口点。
//use printf
#pragma comment(linker, "/subsystem:\"CONSOLE\" /entry:\"WinMainCRTStartup\"")


#include "stdafx.h"
#include "windows.h"
#include <iostream>



#pragma  comment(lib, "JLinkARM.dll")

using namespace std;

#define DllImport   __declspec( dllimport )

#define DllExport   __declspec( dllexport )

#define BUF_MAX_SIZE                        600

unsigned char buf[BUF_MAX_SIZE];

DWORD WINAPI ThreadProc(LPVOID lpParam)
{
    ///函数类型定义
    typedef void(*pFunc_ReadMem)(unsigned int addr, unsigned int size, unsigned char *buf);
    typedef unsigned int(*pFunc_ExecCommand)(char *device, unsigned char *pbuf, unsigned int size);
    //加载动态库
    HMODULE hMod = LoadLibrary("JLinkARM.dll");
    ///根据函数名获取函数指针
    pFunc_ReadMem preadMem = (pFunc_ReadMem)GetProcAddress(hMod, TEXT("JLINKARM_ReadMem"));
    pFunc_ExecCommand  pexe = (pFunc_ExecCommand)GetProcAddress(hMod, TEXT("JLINKARM_ExecCommand"));

    unsigned int ret = 0;
    ///选择芯片类型
    ret = pexe("Device = Cortex-M3", buf, 64);


    while (1)
    {
        //读取芯片指定内存地址

        unsigned int curTick = GetTickCount();

        preadMem(0x2000B000, BUF_MAX_SIZE, buf);
        
        curTick = GetTickCount() - curTick;

        for (unsigned int i = 0; i < 10; i++)
        {
            printf("buf[%d] is %02x,use tick %d\r\n",i, buf[i],curTick);
        }
        Sleep(1000);

    }
    return 0;
}



int _tmain(int argc, _TCHAR* argv[])
{
    HINSTANCE hinstanbceLib = LoadLibrary("JLinkARM.dll");

    void * fun  = GetProcAddress(hinstanbceLib, MAKEINTRESOURCE(219));

    DWORD threadID;
    HANDLE hThread;

    hThread = CreateThread(NULL, 0, ThreadProc, NULL, 0, &threadID); // 创建线程  

    //必须加上这句话,不然子线程没有创建起来,主程序直接返回掉了
    WaitForSingleObject(hThread, INFINITE);
    //关闭内核对象  
    CloseHandle(hThread);   


        return 0;
}

出0入0汤圆

发表于 2018-1-2 10:50:44 来自手机 | 显示全部楼层
之前好像有人贴过jlink列表

出0入8汤圆

 楼主| 发表于 2018-1-2 15:45:36 | 显示全部楼层
huangqi412 发表于 2018-1-2 10:50
之前好像有人贴过jlink列表

是的   。

参考了他的那个列表和另外一个用lora搞的。

可以操作芯片。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-19 06:06

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表