首页
社区
课程
招聘
[IDA使用技巧]#020: “游历四方”
发表于: 2024-4-15 13:06 1940

[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):复杂情况下可使用多个符号

使用寄存器

在调试过程中,可以使用寄存器名称作为变量,与前面示例中的名称类似。例如,可以跳转到EAXRSPds:si(16 位 x86)、X0+0x20(ARM64)等。这在反汇编和十六进制视图中均有效。




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

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