Advanced Debugging
About AdvDbg Consult Train Services Products Tools Community Contact  
欢迎光临 高端调试 登录 | 注册 | FAQ
 
  ACPI调试
Linux内核调试
Windows内核调试
 
  调试战役
调试原理
新工具观察
 
  Linux
Windows Vista
Windows
 
  Linux驱动
WDF
WDM
 
  PCI Express
PCI/PCI-X
USB
无线通信协议
 
  64位CPU
ARM
IA-32
  CPU Info Center
 
  ACPI标准
系统认证
Desktop
服务器
 
  Embedded Linux
嵌入式开发工具
VxWorks
WinCE
嵌入式Windows
 
  格蠹调试套件(GDK)
  格蠹学院
  小朱书店
  老雷的微博
  《软件调试》
  《格蠹汇编》
  《软件调试(第二版)》
沪ICP备11027180号-1

WinDbg

帖子发起人: Dic4000   发起时间: 2015-10-13 21:58 下午   回复: 7

Print Search
帖子排序:    
   2015-10-13, 21:58 下午
Dic4000 离线,最后访问时间: 2015/10/13 13:27:22 Dic4000

发帖数前150位
注册: 2015-10-13
发 贴: 7
请教const变量是否和_NULL_IMPORT_DESCRIPTOR有关系?

附件: 1.PNG
Reply Quote
我是一个WinDbg初学者,刚刚来到这里的论坛,目前我在学习调试一个简单的C程序时遇到了一个问题,搜索了很长时间,也没找到一个明确的答案,希望大家能给我点提示。
程序如下:
#include<stdio.h>
int main(void)
{
int a = 1235;

const char *str = "abcdef";
printf("a=%d,str=%s\n", a, str);
int b = 9;
int sum = SumX(a, b, 3, 1);
printf("sum=%d", sum);
return 0;
}

int SumX(int a, int b, int d, int e)
{
int c = a + b;
return c;
}


在汇编模式下跟踪到 const char *str = "abcdef"; 这一语句时,显示的汇编语句是:
mov    dword ptr[ebp - 8], offset main!_NULL_IMPORT_DESCRIPTOR <PERF>(main + 0x22000) (011d2000)

我对于这里的 offset main!_NULL_IMPORT_DESCRIPTOR 命令不是很明白,我用命令
da main + 0x22000 查看内存,显示的如同预期一样是“abcdef”,但是用命令
da main!_NULL_IMPORT_DESCRIPTOR 却显示的是“” (空字符串),用x main!_NULL_IMPORT_DESCRIPTOR 查看地址是0x011d1268,  这个地址0x011d1268与(main + 0x22000 = 0x011d2000) 并不一致。

后来我发现<PERF>是 performance - optimized code的含义,但我编译此程序是用命令行并没有打开任何优化开关
编译程序用的是Visual Studio 2013 x86 命令行工具
我想知道对于“const char *str = "abcdef" 语句 为何会反汇编出offset main!_NULL_IMPORT_DESCRIPTOR 这样的语句,却找不到相应地址中的内容,这个和const变量有什么关系吗?
能为我讲讲原因吗?不甚感激~~~


IP 地址: 已记录   报告
   2015-10-14, 15:32 下午
Levwz 离线,最后访问时间: 2012/7/24 13:20:47 悬崖遛马

发帖数前25位
注册: 2012-07-24
发 贴: 30
Re: 请教const变量是否和_NULL_IMPORT_DESCRIPTOR有关系?
Reply Quote
1. offset main!_NULL*** 和 main!_NULL*** 是不一样的。
2. const 不影响生成的机器码

IP 地址: 已记录   报告
   2015-10-15, 00:22 上午
Dic4000 离线,最后访问时间: 2015/10/13 13:27:22 Dic4000

发帖数前150位
注册: 2015-10-13
发 贴: 7
Re: 请教const变量是否和_NULL_IMPORT_DESCRIPTOR有关系?
Reply Quote
很感谢你的回复,让我知道我弄错的概念了(汇编也刚刚开始学,很多概念也没理解到位~~~)
我把 main!_NULL_IMPORT_DESCRIPTOR 这个Symbol的地址的值(0x011d126)当成了Offset(偏移量),我一直以为 地址的偏移量是基于0开始的,所以地址就相当于偏移量了。

 我现在还有2个问题想请教下:
1: offset  main!_NULL_IMPORT_DESCRIPTOR 这个语句所取到的偏移量不是基于0计算得到的,那么它是基于哪个位置(段)的呢?
2:Windbg中有没有什么命令或方式可以得到类似于 offset  main!_NULL_IMPORT_DESCRIPTOR 的结果?这个我搜索了好久都没找到。
3:我知道可以使用dumpbin工具可以查看程序中有哪些段以及这些段的范围,在WinDBG中有类似的命令吗?如何知道哪个地址属于哪个段?

IP 地址: 已记录   报告
   2015-10-16, 10:55 上午
Levwz 离线,最后访问时间: 2012/7/24 13:20:47 悬崖遛马

发帖数前25位
注册: 2012-07-24
发 贴: 30
Re: 请教const变量是否和_NULL_IMPORT_DESCRIPTOR有关系?
Reply Quote
从生成的汇编代码来看,你的代码应该还是启用了优化的,建议到设置里面disable掉所有优化选项。或者用debug模式调试
IP 地址: 已记录   报告
   2015-10-16, 14:12 下午
Raymond 离线,最后访问时间: 2020/7/3 3:40:25 格蠹老雷

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: 请教const变量是否和_NULL_IMPORT_DESCRIPTOR有关系?
Reply Quote
1,运行期是就是线性地址空间的偏移地址,等价于线性地址
2,直接用x main!_NULL_IMPORT_DESCRIPTOR 
3,找到模块起始地址,然后!dh <模块起始地址>




IP 地址: 已记录   报告
   2015-10-16, 21:30 下午
Dic4000 离线,最后访问时间: 2015/10/13 13:27:22 Dic4000

发帖数前150位
注册: 2015-10-13
发 贴: 7
Re: 请教const变量是否和_NULL_IMPORT_DESCRIPTOR有关系?

附件: 2.png
Reply Quote
谢谢楼上的回复,但第二个回答我还是没有弄懂。你是说“x main!_NULL_IMPORT_DESCRIPTOR”命令运行后的结果就是汇编语句“offset  main!_NULL_IMPORT_DESCRIPTOR”的结果吗?
可这样对不上啊,你看我新的截图:


main模块的地址范围:                                00cd0000H ~ 00cf7000H
x main!main                                                00cd1000H
x main!_NULL_IMPORT_DESCRIPTOR           00cf1288H
字符串"abcdef"                                              00cf2000H

这个00cf2000H才是字符串"abcdef"最终在内存中的地址,也是模块的起始地址(00cd0000H)加上00cf2000H的偏移的结果,可那个x main!_NULL_IMPORT_DESCRIPTOR的结果是怎样变成00cf2000H的呢?

 Levwz wrote:
从生成的汇编代码来看,你的代码应该还是启用了优化的,建议到设置里面disable掉所有优化选项。或者用debug模式调试
我编译的时候 用-od 关掉了优化,
下面是我的cl编译选项:
- c
- X
- I"E:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\VC\\include"
- TC main.c
- Gd
- Od
- FAcs
- Fa"Manual\\"
- Fd"Manual\\"
- Fo"Manual\\mainObj.obj"
- Zi
- Zl
- Za





IP 地址: 已记录   报告
   2015-10-17, 10:38 上午
Levwz 离线,最后访问时间: 2012/7/24 13:20:47 悬崖遛马

发帖数前25位
注册: 2012-07-24
发 贴: 30
Re: 请教const变量是否和_NULL_IMPORT_DESCRIPTOR有关系?
Reply Quote
我只是看函数开头不是标准栈帧猜测的
不知道编译器对main函数是否有特殊处理

IP 地址: 已记录   报告
   2015-10-17, 17:51 下午
Dic4000 离线,最后访问时间: 2015/10/13 13:27:22 Dic4000

发帖数前150位
注册: 2015-10-13
发 贴: 7
Re: 请教const变量是否和_NULL_IMPORT_DESCRIPTOR有关系?
Reply Quote
用的cdecl调用约定。
IP 地址: 已记录   报告
高端调试 » 软件调试 » WinDbg » Re: 请教const变量是否和_NULL_IMPORT_DESCRIPTOR有关系?

 
Legal Notice Privacy Statement Corporate Governance Corporate Governance
(C)2004-2020 ADVDBG.ORG All Rights Reserved.