- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有没有办法访问可执行文件中包含的Jedi调试信息(JDBG)?
微软调试工具向我指出了二进制文件中的堆栈链,我想知道这些偏移量对应的方法/过程/函数:
user32.dll!SendMessageA+0x4c
StackOverflow.exe+0x179263
StackOverflow.exe+0x2315b5
StackOverflow.exe+0x1fc82
StackOverflow.exe+0x50388
StackOverflow.exe+0x541fe
user32.dll!gapfnScSendMessage+0x332
显然我正在调用SendMessage
,但我不知道从哪里调用。可执行文件是使用嵌入在可执行文件中的 Jcl 调试信息构建的;但我不知道如何阅读它。
查看JclDebug.pas
中的一些函数和类,一切似乎都是为了获取当前进程内部的调试信息,例如:
function GetLocationInfo(const Addr: Pointer; var Info: TJclLocationInfo): Boolean;
获取我当前进程的地址空间中的地址。它可以找出地址所在的 HMODULE
,例如:
我想我可以使用LoadLibrary
(它返回一个HMODULE
)来手动加载模块,然后将其提供给一些通过模块图像挖掘的类调试信息:
module := LoadLibrary('C:\Users\Ian\Desktop\StackOverflow.exe');
和
TJclDebugInfoList = class(TObjectList)
private
function GetItemFromModule(const Module: HMODULE): TJclDebugInfoSource;
...
protected
function CreateDebugInfo(const Module: HMODULE): TJclDebugInfoSource;
...
end;
除非它受到保护。
我正在尝试(希望)我可以编写一个工具,在其中选择二进制文件(*.exe),输入地址,然后返回
偏移量。
例如
[002315B5] FMain.TfrmMain.lvQuestions (Line 158, "FMain.pas" + 1) + $11
可能吗?
<小时/>编辑:我的第一个粗略且现成的方法是提取压缩的map
文件,以便我可以查看它。但它没有保存为资源 (?):
虽然通用工具会更有用:
<小时/>
更新:
我尝试使用TJclDebugInfoList
;我意识到数组属性 ItemFromModule
将访问 protected 方法:
function GetModuleLocationInfo(filename: string; Addr: Pointer): TJclLocationInfo;
var
module: HMODULE;
infoList: TJclDebugInfoList;
infoSource: TJclDebugInfoSource;
Address: Pointer;
locationInfo: TJclLocationInfo;
AddressOffset: Integer;
begin
module := LoadLibrary(filename);
if module = 0 then
RaiseLastWin32Error;
try
infoList := TJclDebugInfoList.Create;
try
infoSource := infoList.ItemFromModule[module];
if source = nil then
raise Exception.Create('Could not find debug info source for module '+IntToStr(module));
if not source.GetLocationInfo(Addr, {var}locationInfo) then
raise Exception.Create('Could not get location info for address $'+IntToHex(Integer(Address), 8));
Result := locationInfo;
finally
infoList.Free;
end;
finally
FreeLibrary(module);
end;
end;
除了 TJclDebugInfoSource
后代类之一中的代码在尝试将其假定的虚拟地址转换为偏移地址时会发生下溢。
最佳答案
使用从 LoadLibrary
获取的 HModule
句柄创建一个 TJclDebugInfoBinary
对象。然后对其调用GetLocationInfo
。这就是 TJclDebugInfoList
无论如何都会做的,除了它有一些辅助方法来将地址从当前地址空间映射到它们对应的模块,而当您手动执行此操作时,您必须已经知道地址属于哪个模块。 (但是故障转储已经告诉了您这部分,因此您不需要列表类的帮助。)
您可能需要修改地址,因为崩溃时模块的基地址与您使用 LoadLibrary
加载模块时的基地址不同。
JCL 调试信息未存储在资源中。它存储在名为 JCLDEBUG 的 PE 节中。请参阅 JclDebug.pas 中 PeMapImgFindSection32
和 PeMapImgFindSectionFromModule
的使用。
关于delphi - 访问可执行文件中包含的 JCL 调试信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6019698/
我遇到了以下场景,我对 cond 参数如何在前面的步骤中起作用有点困惑,这是 flsuhed 出来的。 比如…… //第一步执行 //步骤 2 执行条件=(0,ne,step1) //步骤 3 执行条
我试图了解 JCL 文件中哪里出了问题。我的代码如下: //MULTG013 JOB 1,NOTIFY=&SYSUID //STEP1 EXEC PGM=ICEGEN
我遇到了以下场景,我对 cond 参数如何在前面的步骤中起作用有点困惑,这是 flsuhed 出来的。 比如…… //第一步执行 //步骤 2 执行条件=(0,ne,step1) //步骤 3 执行条
我对如何在 JCL 中为我在 COBOL 类中执行的作业创建符号变量感到有点困惑。 例如,我应该“为 PARM 选项指定一个符号参数,并将 TEST 和 APOST 指定为默认值。” 如何将“PARM
要调用 Rexx 程序并传递参数,可以使用 IKJEFT01 // SET PARM1= // SET PARM2= //AUDITDS EXEC PGM=IKJEFT01, // PARM
在尝试日志依赖时,我遇到了以下情况: version99 http://version99.qos.ch/
我正在使用 JCL,并且有一个叫做 ICEMAN 的东西,它在使用 IBM SORT 实用程序 DFSORT 时被调用。 DFSORT 可用于排序、复制或合并文件等。在下面的示例中,输出来自 SORT
我尝试使用 IBM z/OS 运行以下 JCL 程序 //PAYMENT JOB MSGCLASS=H //PAYMENT EXEC PGM=PAYMENT,REGION=1024K
//STE1 IF RC EQ 1 THEN .... //结束 返回代码给我 FLUSH 并且所有其他作业都因此没有执行谁可以帮我这个事。是因为我没有给ELSE吗? 最佳答案 如果您有运行步骤的条件
我正在尝试以这种方式创建和删除数据集名称中带有 JCL 符号的数据集: // SET DATE=20110809 //* DELETE DATASET //DEL01 EXEC PGM=IDCA
我想知道 KEEP 和 UNCATLG 之间的区别。 据我所知,两者都将删除数据集的目录条目。 感谢和问候,玛纳西 最佳答案 我不相信。 KEEP如果该条目已经存在,则不会从目录中删除该条目。 UNC
有没有办法访问可执行文件中包含的Jedi调试信息(JDBG)? 微软调试工具向我指出了二进制文件中的堆栈链,我想知道这些偏移量对应的方法/过程/函数: user32.dll!SendMessageA+
有谁知道 Delphi 7 的 TEvaluator JCL 类中包含哪些预定义函数(例如 ABS 函数)? 最佳答案 Math.pas 中没有任何标准函数包括。默认评估解析器中实现的所有内容都是运算
背景 我们遇到一个问题,有时 Devexpress 中的网格会引发异常“引发 EConvertError:无法将 nil 分配给 TFont”。 但是为了追踪其真正原因,我们将 cxEdit 中的 F
JCL 库有一个条件定义 UNITVERSIONING。我不知道为什么这个选项存在,也不知道如何使用它。我知道有一个名为 JclUnitVersioning.pas 的单元,但找不到用途。 在实际项目
摘要: 我无法让 JCL 压缩库打开任何跨区存档。它显示了 borlands 'windows.pas' 中定义的错误“(0000001) 错误函数”; 场景: 使用 JCL 压缩示例压缩的单个存档。
在 JCL 中,通常使用 &(与号)后跟变量名称来创建符号参数。 但是在数据集名称中,变量名称后面必须跟有点号。示例: //J&USER JOB 1 //MYSTEP EXEC PGM=MYPROG
有人有使用 Actian 的 JCL 将数据检索到 Java 中松散耦合的普适数据库的示例吗?我连接的数据库只有 DAT 文件。我的目标是在 Pervasive 和 MS SQL 之间建立联系。 我不
我有一个生成随 secret 码的程序。这些引脚是用 Java 生成的,然后通过 NATURAL 程序存储在大型机中。从那里,它们最终由批处理 JCL 作业实际打印,该作业调用 MVS SCRIPT
我有一个非常棘手的问题。我有一种容器,可以使用具有类 ComponentContext 作为参数的方法来运行自定义 JAR。加载后,我想通过反射调用此方法,但有一个问题 - 我必须使用相同的类加载器(
我是一名优秀的程序员,十分优秀!