-
-
[IDA使用技巧]#020: “游历四方”
-
发表于: 2024-4-15 13:06 1940
-
翻译:梦幻的彼岸
原文地址: https://hex-rays.com/blog/igors-tip-of-the-week-20-going-places/
即使你更喜欢通过点击在 IDA 中移动,也应该记住 G 快捷键。该快捷键背后的操作名为 "Jump to address",但它的功能远不止这个名字。
跳转到地址
首先是实际跳转到地址:输入要跳转到的地址值。可以用0x作为前缀,表示十六进制符号,但这是可选项:如果没有前缀,输入的字符串将被解析为十六进制数。
在采用分段架构(如16位x86)的系统中,可以使用段:偏移量的语法。其中,段可以是符号名称(如seg001、dseg),也可以是十六进制数值(如F000);偏移量则应为十六进制形式。若当前数据库同时包含分段寻址和线性(flat)寻址的段(例如,一个包含32位保护模式操作系统映像的高内存区的遗留16位引导程序),可使用“segmentp[节]”0来强制使用线性地址(如0:1000000)。
跳转到当前位置
如果输入值的前缀是 + 或 - ,则将其视为光标位置的相对偏移量。同样,0x前缀是可选的: +100向前跳转 256 字节,-10000向后跳转 64KiB(65536 字节)。
跳转到名称
输入程序中的名称(函数名、全局变量名或标签)可直接跳转到该名称。需要注意的是,原始名称应按照程序中的用法输入,并尽可能使用特殊符号,例如_main表示main(),??2@YAPEAX_K@Z表示操作符 new()。
跳转到表达式
可以使用 C 语法表达式来代替bare[空]地址或名称。与 C 语言一样,十六进制数字必须使用0x前缀,否则将假定为十进制。这里可以使用名称或特殊关键字(并解析为其地址)。举几个例子
- 此处 + 32*4:跳转 32 个字符。相当于+80
- _main - 0x10:跳转到函数 main() 之前 0x10 字节的位置
- f2 + (f4-f3):复杂情况下可使用多个符号
使用寄存器
在调试过程中,可以使用寄存器名称作为变量,与前面示例中的名称类似。例如,可以跳转到EAX、RSP、ds:si(16 位 x86)、X0+0x20(ARM64)等。这在反汇编和十六进制视图中均有效。
赞赏
- [原创]物联网安全:基础篇 4099
- 威胁情报小课堂:阻止活跃勒索软件的感染 2165
- [翻译]发现利用 Facebook 和 MS 管理控制台实施的 Kimsuky APT 攻击 7041
- 威胁情报小课堂:LockBit Black 2041
- 威胁情报小课堂:Nitrogen 2067