【问题标题】:mov eax, large fs:30hmov eax, 大 fs:30h
【发布时间】:2013-01-24 08:19:51
【问题描述】:

我正在分析一些 x86 二进制文件,发现以下指令我无法理解。有人可以按照说明向我解释一下吗?

mov eax, 大 fs:30h

我用谷歌搜索了这个,结果发现它是一些反调试的东西……但我只知道这些。

large 是什么意思?还有fs:30是什么意思??

我知道分段,但我不知道何时使用fs 寄存器。比如cs:ds: 在指令引用代码或数据时被隐式跳过。但是fs是什么,gs是什么?

【问题讨论】:

  • 什么平台?你在 Linux 上运行吗?
  • 请参阅What is large dword? 了解该部分的问题。这里的答案只回答fs 用于线程本地的东西。

标签: debugging assembly x86 ida mov


【解决方案1】:

看起来是Windows代码,通过线程信息块加载进程环境块(PEB)的地址,可以通过FS段访问。

除其他外,PEB 包含一个标志,指示进程是否正在调试。

MSDN 有一个关于它的页面here

【讨论】:

  • 通过线程环境块 (TEB) _TEB +0x030 ProcessEnvironmentBlock : Ptr32 _PEB 线程信息块 (TIB) _NT_TIB - TEB 的第一个成员 +0x000 NtTib : _NT_TIB
  • 是的,完全正确。 fs:[30] + 0xC = PEB_LDR_Data, + 0x0C = 已加载模块的 InMemoryOrderModuleList。然后你可以探索他们的出口。
猜你喜欢
  • 2012-10-10
  • 2017-05-05
  • 2016-05-29
  • 2013-09-10
  • 2019-03-30
  • 2014-10-28
  • 2020-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多