dll源码调试
❶ 对应没有源码的dll文件能调试吗
好像不可以吧,一般编写dll文件是都会有一个头文件,这个头文件编程dll的功能说明。
❷ 如何调试带有源代码的dll文件
第一步,调试的准备。
用C#语言编写一个测试dll文件的程序,由于dll源程序是c的,且运行结果是黑屏的,所以C#代码也是运行在黑屏的console环境下。完整代码如下。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace TestMelp{class Program{[DllImport(@D:\Visual Studio Projects\FileMelp\Debug\FileMelp.dll, CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
extern static void cmd_melp(int argc, string[] argv);
static void Main(string[] args){//string cmd = melp -s -i D:/bin/bit -o D:/bin/output;
string cmd = melp -a -i D:/bin/inputD -o D:/bin/bitRight;
string[] argv = cmd.Split(new char[] { ' ' });
int argc = argv.Length;
cmd_melp(argc, argv);}}}由于调试的FileMelp.dll文件和本程序不在同一个文件夹下,容易出现文件地址问题,所以本测试程序的文件均采用绝对地址。另外cmd的格式要求不能有两个连续的空格,也可以通过使用Trim函数,解决这个问题。
第二步,定位到自己改写的带有源代码的dll工程。
本文的FileMelp.dll工程,是通过本空间的生成VS dll那篇博客生成的,具体实现方法不在赘述。下面的两段代码分别添加到FileMelp工程melp.h和melp.c文件最下面。
#ifndef LIB_H
#define LIB_H
extern _declspec(dllexport) void cmd_melp(int argc, char **argv);
/* 加入任意你想加入的函数定义*/#endifvoid cmd_melp(int argc, char **argv){main(argc,argv);}按F6,上述步骤实现FileMelp.dll动态库的生成。
第三步,添加测试程序到dll源代码处。
在FileMelp工程里面,右击FileMelp工程,选择属性。
或者按Alt+Enter,弹出如下界面。
在Configuration Properties\Debugging\Command选择第一步生成的测试.exe文件。这样完成了调试前的准备。接下来,在需要调试的代码地方,添加断点。
❸ DLL怎么设置才能调试 在线等
1、32 位的程序的话,可以使用olldbg 简称od,它有loaddll 。
2、如果DLL是你写的,也就是你有源码,可以在DLL_PROCESS_ATTACH通知中,加上一句断点:
__asm int 3
然后,你写一个exe程序,loadlibrary()直接加载这个DLL文件,你用调试器,载入程序,直接运行,马上就会终断到断点处。
3、别人的DLL,你可以使用动态调试器, 在关键CALL上直接跟进去然后分析就好了。
4、静态反汇编分析,直接用IDA把DLL文件进行二进制分析。。自己看代码吧。
❹ VB高手进,dll怎么调试
dll调试步骤如下:
1.在原来的dll工程(举例为:dll工程名:ABxzMsdyht)里 ---》添加工程 ---》标准exe--》打开,创建了工程1,自动生成 form1 窗体。---》生成 工程1.exe。
2.在form1窗体里添加一个按钮在按钮的代码中添加代码:
Private Sub Command1_Click()
Dim AAAA As New CDTeXt
AAAA.xianshizhuchuangti '显示画图主窗体
End Sub
注意:CDTeXt 为 dll(工程:ABxzMsdyht)里的一个类模块名。
3. 在 dll(工程:ABxzMsdyht)里的 工程属性---》调试---》启动程序--》浏览到本文件下的工程1.exe,在部件选项卡中 选择 二进制兼容-----》确定。
4. 工程1.的启动对象 改为:form1。
5.工程1.引用位置--》浏览 --》找到本文件下的----》ABxzMsdyht.vbp (注意引用对话框中的:文件类型为:所有文件(*.*))----》打开---》确定。
6.文件---》生成工程组后保存,这样就可以用 F8 步步调试 dll。
注意:在工程1.exe 和dll 类模块中都设断点 这样就可以 用 F8 步步调试 dll。
❺ 如何有效的调试MFC DLL
在MFC DLL中,可能出错的地方::AfxMessageBox(L"这里输出某些变量的值或者显示一下执行到哪个位置了");
找出问题之后再修改,然后把::AfxMessageBox注释
或者就用GOOGLE出来的调试方法。
这个不管用,因为暴异常的地方是在MFC源码里头,而不是我的MFC dll代码里头(dll的代码哪里出问题,这个我可以确定,因为有自己的SEH跟着)
❻ 动态链接库dll应该怎样设置调试
DLL有三种调试方法:
方法1:
如果动态链接库是自己编写的,并且测试代码也是自己编写的,那么此时我们可以将动态链接库和测试代码的工程建立在一起,在调试测试代码的时候,可以直接调用动态链接库中的代码。
我们在测试链接库项目中的100行打个断点,当执行到此处的时候,按F11就会进入到动态链接库项目中的源码中,就可以进行调试了。
方法2:
如果动态链接库是自己编写的,而调用动态链接库的程序不是自己编写的,那么我们需要设置动态链接库中的项目属性,启动调用动态链接库的程序,形成链接之后,在调试的时候才可以数你在动态链接库中调试。如下图:
在项目属性的调试中设置完成对应要启动的exe之后,设置dll为启动项目,即可以运行调试。
方法3:
如果动态链接库不是自己编写,程序也不是自己编写,那么这个时候只能通过Ollydbg或者其他调试工具调试了。使用OD调试dll,需要保证OD目录下有loaddll.exe文件。
需要三个步骤如下:
1)我们可以先借助LordPE获取到导出表中的方法的RVA地址
2)借助OD获取到项目的基址
3)通过基址和RVA计算出来VA,就找到函数了