首页
社区
课程
招聘
[原创]用ida调试.net clr相对容易
发表于: 2015-10-14 14:47 4411

[原创]用ida调试.net clr相对容易

2015-10-14 14:47
4411
一般跟踪compileMethod可以得到il代码。
相比其它debugger来说ida可以支持32位和64位调试,加上ida的反编译功能就很方便用来调试clr。

例如:
打开mscorjit.dll,直接在PreJit::compileMethod添加断点,
__int64 __usercall PreJit::compileMethod@<rax>(struct ICorJitInfo *a1@<rdx>, struct PreJit *a2@<rcx>, __int64 a3@<rdi>, __int64 a4@<rsi>, struct CORINFO_METHOD_INFO *a5@<r8>, unsigned __int32 a6@<r9d>, unsigned int a7@<r12d>, unsigned int a8@<r13d>, _QWORD *a9, _DWORD *a10)

struct CORINFO_METHOD_INFO
{
  int *ftn;
  int *scope;
  BYTE *ILCode;
  unsigned int ILCodeSize;
  unsigned __int16 maxStack;
  unsigned __int16 EHcount;
  CorInfoOptions options;
};

运行
ILCode  0x13B740Di64 BYTE * 字节码的地址
ILCodeSize  0xEu unsigned int 字节码的长度
用idc来dump字节码的十六进制数据
auto ILCode = 0x13B740Di64;
auto ILCodeSize = 0xEu;
auto i;
for (i = ILCode; i<ILCode+ILCodeSize; i++)
     Message("%02X ", Byte(i));
得到:
FE 09 00 00 FE 09 01 00 6F 85 00 00 0A 2A
反编译:
IL_0000: ldarg 0x0
IL_0004: ldarg 0x1
IL_0008: callvirt instance string [mscorlib]System.Text.Encoding::GetString(uint8[] )
IL_000D: ret

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//