IDA调试WINCE程序进不了DLL地址
用IDA远程调试一个WINCE程序,该程序用LoadLibraryW加载了一个DLL,再用GetProcAddress获取DLL入口地址,然后跳转到该入口地址执行。我想在获取DLL入口后,直接到入口处下断,结果提示JMPASK错误,无法进入DLL空间。用G命令也进不了该地址。在模块列表中也进不了该地址。从GetProcAddress的返回值看,该DLL已经正常加载了,但为什么就是进不了DLL空间呢?请各位指点一下,如何才能进入DLL空间。 --------------------编程问答-------------------- wince多少版的,没权限吧,静态观察看不出结果吗 --------------------编程问答--------------------谢谢回复!wince60版本的,需要动态跟踪才能看出各寄存器的作用,而关键代码都在DLL中。 --------------------编程问答-------------------- .text:00013400 STR R0, [R4,#(dword_11528C - 0x115250)]
.text:00013404 MOV R0, R4
.text:00013408 MOV LR, PC
.text:0001340C MOV PC, R1 //运行到这里,F7就跑飞了。
.text:00013410 MOV R4, R0
.text:00013414 LDR R0, [R10] ; hLibModule
.text:00013418 BL FreeLibrary
.text:0001341C MOV R0, R4
.text:00013420 ADD SP, SP, #4
.text:00013424 LDMFD SP, {R4-R10,SP,PC}
.text:00013424 ; End of function sub_1332C
运行到.text:0001340C MOV PC, R1 时,R1=419F90EC 就是DLL的入口地址。在这里再F7单步就跑飞了。
在text:0001340C时无论是g 419F90EC 还是在模块列表里JMP到模块地址,都不行。 --------------------编程问答-------------------- 发现问题所在了,原来是系统版本的问题,WINCE50就没问题,WINCE60就不行。原来是2个版本的内存管理方式不同。WINCE60禁止其他进程访问0X40000000-0X4FFFFFFF虚拟内存空间。请问各位兄弟,有什么办法可以让调试器访问这个虚拟内存空间? --------------------编程问答-------------------- --------------------编程问答--------------------
补充:移动开发 , Windows Phone