惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
DataBreaches.Net
J
Java Code Geeks
有赞技术团队
有赞技术团队
H
Hackread – Cybersecurity News, Data Breaches, AI and More
The GitHub Blog
The GitHub Blog
T
The Blog of Author Tim Ferriss
Apple Machine Learning Research
Apple Machine Learning Research
量子位
D
Docker
V
Visual Studio Blog
博客园 - 司徒正美
Martin Fowler
Martin Fowler
人人都是产品经理
人人都是产品经理
WordPress大学
WordPress大学
U
Unit 42
M
MIT News - Artificial intelligence
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
G
Google Developers Blog
Engineering at Meta
Engineering at Meta
V
V2EX
大猫的无限游戏
大猫的无限游戏
雷峰网
雷峰网
Vercel News
Vercel News
C
Check Point Blog

卷卷

今日说法 节目汇总笔记 《斯坦福大学人生设计课》读书笔记 我的书单📖 H-worm (VBS蠕虫) 感染事件溯源分析报告 AMOS (Atomic Stealer) 恶意软件深度分析 银狐26年全面复活,对抗强度或已超25年最高水平 Atomic Stealer (AMOS) 回归:ClickFix、伪装加密货币应用与新型 macOS 持久化机制 关于xt.exe的分析报告 仿真钓鱼页面窃取用户凭证 GitHub Pages配置Cloudflare CDN踩坑之路 推荐RSS热力图和Github热力图使用指南 学习逆向工程相关概念 zabbix快速上手 学习python高级语法特性例题笔记 学习云计算基本理论学习笔记 学习Docker-Compose命令及镜像构建与推送 ATT &CK 框架实践阅读笔记 rundll32.exe恶意加载DLL文件外联 《悉达多》读书笔记 《稀缺》读书笔记 《认知觉醒》读书笔记 《营养学》读书笔记 《心理学》读书笔记 热💖生活 C++开发环境配置与程序运行笔记 逆向免杀 Admin.canway账号命名方式 BAS - Breach and Attack Simulation Windows核心系统进程链与svchost深度解析 企业测试环境的弱口令需要整改吗
IDA Free调试Hello World笔记
卷卷 · 2025-12-26 · via 卷卷

一、C++源代码与IDA伪代码对比

1. C++源代码

#include <iostream>

using namespace std;

int main() {
    cout << "Hello World!" << endl;

    long long a; // 声明变量a为整数类型
    std::cin >> a;
    std::cout << "You entered: " << a << std::endl;

    return 0;
}

2. IDA反汇编伪代码

int __cdecl main(int argc, const char **argv, const char **envp) 
{ 
  std::ostream *v3; // rax 
  __int64 v4; // rax 
  std::ostream *v5; // rax 
  __int64 v7; // [rsp+28h] [rbp-8h] BYREF 

  _main(argc, argv, envp); 
  v3 = (std::ostream *)std::operator<<<std::char_traits<char>>(refptr__ZSt4cout, "Hello World!"); 
  refptr__ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(v3); 
  std::istream::operator>>(refptr__ZSt3cin, &v7); 
  v4 = std::operator<<<std::char_traits<char>>(refptr__ZSt4cout, "You entered: "); 
  v5 = (std::ostream *)std::ostream::operator<<(v4, v7); 
  refptr__ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(v5); 
  return 0; 
}

3. 代码对应关系分析

C++源代码IDA伪代码说明
cout << "Hello World!" << endl;v3 = (std::ostream *)std::operator<<<std::char_traits<char>>(refptr__ZSt4cout, "Hello World!");
refptr__ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(v3);
cout对应refptr__ZSt4cout,endl对应endl函数
long long a;__int64 v7; // [rsp+28h] [rbp-8h] BYREFlong long类型在IDA中显示为__int64
std::cin >> a;std::istream::operator>>(refptr__ZSt3cin, &v7);cin对应refptr__ZSt3cin,&v7是变量a的地址
std::cout << "You entered: " << a << std::endl;v4 = std::operator<<<std::char_traits<char>>(refptr__ZSt4cout, "You entered: ");
v5 = (std::ostream *)std::ostream::operator<<(v4, v7);
refptr__ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(v5);
输出字符串和变量a的值
return 0;return 0;函数返回值

二、IDA Free下载与安装

1. 下载地址

2. 安装步骤

  1. 运行下载的安装程序
  2. 选择安装路径(默认即可)
  3. 选择组件:确保勾选"IDA Freeware"
  4. 完成安装

三、IDA Free使用步骤

1. 打开并加载程序

  1. 启动IDA Free
  2. 点击"New"或使用快捷键Ctrl+N
  3. 选择要分析的程序文件(如hello.exe)
  4. 在"Load a new file"对话框中:
    • 选择"PE file"(Windows可执行文件)
    • 保持默认加载选项
    • 点击"OK"
  5. 等待IDA完成加载和分析

2. 设置黑色主题

  1. 点击菜单栏"Options" → "Color"
  2. 在"Color"对话框中:
    • 点击"Load"
    • 选择"dark.idc"主题文件
    • 点击"Open"
  3. 点击"OK"应用黑色主题

3. 查找main函数

  1. 在IDA主界面,确保显示"Functions"窗口(如果没有,点击View → Open Subviews → Functions)
  2. 或者使用快捷键Ctrl+F打开搜索对话框
  3. 在搜索框中输入"main"
  4. 点击"OK"或按Enter
  5. IDA将定位到main函数的反汇编代码

4. 生成伪代码

  1. 在反汇编窗口中,确保光标位于main函数的代码范围内
  2. 按F5键生成伪代码
  3. IDA将打开伪代码窗口,显示C风格的反编译代码

5. 调试程序(F9)

  1. 点击菜单栏"Debugger" → "Process options"
  2. 在"Process options"对话框中:
    • 设置程序路径(默认已填)
    • 可以设置命令行参数(如果需要)
    • 点击"OK"
  3. 点击菜单栏"Debugger" → "Start process"或按F9
  4. 程序将开始运行,IDA将切换到调试视图

6. 设置断点

  1. 方法一:在反汇编或伪代码窗口中,点击要设置断点的行

    • 按F2键设置断点
    • 断点行会显示为红色
  2. 方法二:使用Alt+T搜索特定函数并设置断点

    • 按Alt+T打开"Text search"对话框
    • 输入搜索关键字,如"stdoperator>>"
    • 点击"OK"开始搜索
    • 在搜索结果中找到目标函数
    • 双击结果行定位到代码
    • 按F2设置断点

7. 调试控制

  • F9:继续运行到下一个断点
  • F8:单步执行(不进入函数)
  • F7:单步执行(进入函数)
  • Shift+F7:跳出当前函数
  • Shift+F9:暂停程序

四、IDA伪代码解读

1. 变量命名

  • IDA会自动为变量分配临时名称(如v3、v4、v5)
  • 可以手动重命名变量:右键变量名 → "Rename variable"

2. 函数调用

  • C++标准库函数在IDA中显示为mangled names(如_ZSt4cout)
  • 可以使用"Demangle"功能查看原始函数名:右键函数名 → "Demangle name"

3. 内存地址

  • 变量后面的注释显示了内存位置(如[rsp+28h] [rbp-8h])
  • BYREF表示该变量是通过引用传递的

4. 数据类型

  • long long对应__int64
  • int对应__int32
  • char对应const char

适用工具:IDA Freeware 8