源码

#include <stdio.h>
#include <string>

typedef struct _st{
int a;
int b;
}ST;

int fun(int* p, const ST& s)
{
*p = s.a + s.b;
return s.a < s.b ? s.a : s.b;
}

void main()
{
ST s;
s.a = 3;
s.b = 4;
int ret = -1;
int dd = fun(&ret, s);
printf("%d", dd);
getchar();
}

1. !address 查看最初断点位置信息

ntdll!LdrpDoDebuggerBreak+0x2c:

77540ed4 cc              int     3
0:000> bp $exentry
*** WARNING: Unable to verify checksum for test.exe
0:000> bl
     0 e Disable Clear  00af127b     0001 (0001)  0:**** test!ILT+630(_mainCRTStartup)
0:000> !address 77540ed4 
                                     
Mapping file section regions...
Mapping module regions...
Mapping PEB regions...
Mapping TEB and stack regions...
Mapping heap regions...
Mapping page heap regions...
Mapping other regions...
Mapping stack trace database regions...
Mapping activation context regions...

Usage:                  Image
Base Address:           774b0000
End Address:            77586000
Region Size:            000d6000 ( 856.000 kB)
State:                  00001000          MEM_COMMIT
Protect:                00000020          PAGE_EXECUTE_READ
Type:                   01000000          MEM_IMAGE
Allocation Base:        774a0000
Allocation Protect:     00000080          PAGE_EXECUTE_WRITECOPY
Image Path:             ntdll.dll
Module Name:            ntdll
Loaded Image Name:      C:\Windows\SysWOW64\ntdll.dll
Mapped Image Name:      
More info:              lmv m ntdll
More info:              !lmi ntdll
More info:              ln 0x77540ed4
More info:              !dh 0x774a0000

Content source: 1 (target), length: 12c

2.查看加载模块信息

0:000> lm
start    end        module name
00ae0000 00b03000   test     C (private pdb symbols)  E:\Program Files (x86)\Windows Kits\10\Debuggers\x86\sym\test.pdb\37CD5525EB634D36AC9FD918207AF1512\test.pdb
594f0000 596af000   MSVCR120D   (deferred)             
597a0000 59869000   MSVCP120D   (deferred)             
76360000 76470000   kernel32   (deferred)             
76470000 764b7000   KERNELBASE   (deferred)             
774a0000 77620000   ntdll      (pdb symbols)          E:\Program Files (x86)\Windows Kits\10\Debuggers\x86\sym\wntdll.pdb\156A0C04210F41998644103A7354418D2\wntdll.pdb
0:000> bp test!main
0:000> bl
     0 e Disable Clear  00af127b     0001 (0001)  0:**** test!ILT+630(_mainCRTStartup)
     1 e Disable Clear  00af5410     0001 (0001)  0:**** test!main查看

3.查找函数符号并断点
0:000> x test!fun
00af4c30          test!fun (int *, struct _st *)
0:000> bp test!fun
0:000> g

4. kv 查看堆栈,fun函数入口时esp指向函数返回地址esp+4指向左边第一个参数,esp+8.。。。(c调用协定)

0:000> k
 # ChildEBP RetAddr  
00 0045fa34 00af545a test!fun [g:\vsprojects\test\test\test.cpp @ 10] 
01 0045fb3c 00af5db9 test!main+0x4a [g:\vsprojects\test\test\test.cpp @ 21] 
02 0045fb8c 00af5fad test!__tmainCRTStartup+0x199 [f:\dd\vctools\crt\crtw32\dllstuff\crtexe.c @ 626] 
03 0045fb94 7637336a test!mainCRTStartup+0xd [f:\dd\vctools\crt\crtw32\dllstuff\crtexe.c @ 466] 
04 0045fba0 774d9902 kernel32!BaseThreadInitThunk+0xe
05 0045fbe0 774d98d5 ntdll!__RtlUserThreadStart+0x70
06 0045fbf8 00000000 ntdll!_RtlUserThreadStart+0x1b
0:000> .frame 0
00 0045fa34 00af545a test!fun [g:\vsprojects\test\test\test.cpp @ 10] 
0:000> dd esp
0045fa38  00af545a 0045fb20 0045fb2c 00000000
0045fa48  00000000 7efde000 cccccccc cccccccc
0045fa58  cccccccc cccccccc cccccccc cccccccc
0045fa68  cccccccc cccccccc cccccccc cccccccc
0045fa78  cccccccc cccccccc cccccccc cccccccc
0045fa88  cccccccc cccccccc cccccccc cccccccc
0045fa98  cccccccc cccccccc cccccccc cccccccc
0045faa8  cccccccc cccccccc cccccccc cccccccc
0:000> dd 0045fb20
0045fb20  ffffffff cccccccc cccccccc 00000003
0045fb30  00000004 cccccccc bbee73d5 0045fb8c
0045fb40  00af5db9 00000001 005281a8 00528760
0045fb50  bbee7365 00000000 00000000 7efde000
0045fb60  00000000 59cce7d8 00000000 00460000
0045fb70  00000000 0045fb50 e22294be 0045fbd0
0045fb80  00af1109 bb046069 00000000 0045fb94
0045fb90  00af5fad 0045fba0 7637336a 7efde000
0:000> dd 0045fb2c 
0045fb2c  00000003 00000004 cccccccc bbee73d5
0045fb3c  0045fb8c 00af5db9 00000001 005281a8
0045fb4c  00528760 bbee7365 00000000 00000000
0045fb5c  7efde000 00000000 59cce7d8 00000000
0045fb6c  00460000 00000000 0045fb50 e22294be
0045fb7c  0045fbd0 00af1109 bb046069 00000000
0045fb8c  0045fb94 00af5fad 0045fba0 7637336a
0045fb9c  7efde000 0045fbe0 774d9902 7efde000

5.release版本 优化很简
test!main:
010612a0 6a03            push    3
010612a2 688c310601      push    offset test!`string' (0106318c)
010612a7 ff15b8300601    call    dword ptr [test!_imp__printf (010630b8)]
010612ad 83c408          add     esp,8
010612b0 ff15ac300601    call    dword ptr [test!_imp__getchar (010630ac)]
010612b6 33c0            xor     eax,eax

test!main:
010612a0 6a03            push    3
0:000> bp test!fun
Couldn't resolve error at 'test!fun'
0:000> db 0106318c
0106318c  25 64 00 00 73 74 72 69-6e 67 20 74 6f 6f 20 6c  %d..string too l
0106319c  6f 6e 67 00 69 6e 76 61-6c 69 64 20 73 74 72 69  ong.invalid stri

windbg基本简单步骤相关推荐

  1. 如何通过五个简单步骤成为更好的Stack Overflow用户

    by Artem Stepanenko 由Artem Stepanenko 如何通过五个简单步骤成为更好的Stack Overflow用户 (How to become a better Stack ...

  2. tracepro应用实例详解_建筑安装工程造价,高清PPT图文详解,小白也能学会的简单步骤...

    建筑安装工程造价,高清PPT图文详解,小白也能学会的简单流程 工程造价的直意就是工程的建造价格,是指进行某项工程建设所花费的全部费用.工程造价在工程中是很关键的存在,是工程能够取得的关键:对工程建设的 ...

  3. 在Linux系统安装Nodejs 最简单步骤

    在Linux系统安装Nodejs 最简单步骤 1.去官网下载和自己系统匹配的文件: 英文网址:https://nodejs.org/en/download/ 中文网址:http://nodejs.cn ...

  4. sql 执行顺序_10个简单步骤,完全理解SQL

    点击上方SQL数据库开发,关注获取SQL视频教程 SQL专栏 SQL数据库基础知识汇总 SQL数据库高级知识汇总 多年前收藏在笔记中的一篇文章,今天偶然翻出,重读了一遍,依然大有收获.分享出来,大家一 ...

  5. [转]virtualbox下安装增强工具简单步骤

    virtualbox下安装增强工具简单步骤. 因为我最近用VirtualBox安装了Fedora. 直接安装VBoxLinuxadditions-X86.run是会报错的. Building the ...

  6. linux下screen版本,在Linux (RHEL/CentOS 7/8 )中,如何使用4个简单步骤安装Screen命令

    在本文中,我通过4个简单步骤指导您完成在Linux(RHEL/CentOS 7/8)中安装Screen命令.你遇到在Linux会话中运行一些重要任务,但由于某些问题而突然中断了会话,任务在两个会话之间 ...

  7. maven项目 ant_将旧项目从Ant迁移到Maven的4个简单步骤

    maven项目 ant 一段时间以来,我们一直在考虑将构建从蚂蚁移植到Maven. 它发生在上个月,实际上比我们预期的要简单. 根据我的经验,这里简要介绍了我们遵循的步骤. 我们的应用程序是一个具有多 ...

  8. java创建类的三个步骤_3个简单步骤即可测试Java 8

    java创建类的三个步骤 即将发布的Java 8版本为Java开发人员带来了许多新功能,但是升级时始终存在代码破裂的风险. 我们都记得Java 7出厂时有一系列非常严重的错误 . 当然,我们所有人都可 ...

  9. 将旧项目从Ant迁移到Maven的4个简单步骤

    一段时间以来,我们一直在考虑将构建从蚂蚁移植到Maven. 它发生在上个月,实际上比我们预期的要简单. 根据我的经验,这里简要介绍了我们遵循的步骤. 我们的应用程序是一个具有多个框架和技术的企业Web ...

最新文章

  1. 盘点丨机器学习2017年重大进展汇总
  2. python程序在安卓上如何运行-在 android 上运行 python 的方法
  3. (私人收藏)2019科协WER解决方案
  4. 有道编程的界面做的也太粗燥了吧!
  5. [Go]通道(channel)的基本操作
  6. Hbase Compaction 源码分析 - RatioBasedCompactionPolicy 策略
  7. mysql查询优化not in,mysql not in如何优化
  8. springboot 监听所有异常_SpringBoot 全局异常配置及返回自定义页面
  9. 6间企业获颁“首届粤港澳大湾区百强企业传承大奖”
  10. initcall机制原理及实践
  11. apicloud 请删除手机中的apploader后在尝试
  12. paddlex,2.1.0识别预测代码(包含视频的)
  13. html公历农历相互转换,JavaScript实现公历转换农历
  14. 墨天轮沙龙 | 东方通张唐:东方通中间件助力信创发展
  15. FinalShell连接不上LinuxCentOS-7的解决方案
  16. 2018年最新黑马前端视频教程视频与源码全集
  17. iPhoneX停产?对此不敢苟同
  18. 2019oa系统二开php,PHPOA:OA自动化时代已经到来
  19. 计算机四年大学规划书,大学四年规划书
  20. 国家食品药品监督管理局投诉举报

热门文章

  1. Docker Toolbox:Docker Toolbox的简介、安装、使用方法之详细攻略
  2. Windows:利用各种小工具查看自己电脑上的CPUGPU型号、个数、详细参数等不同方法的详细攻略
  3. 成功解决np.array(zip(x1, x2)).reshape(len(x1), 2) ValueError: cannot reshape array of size 1 int
  4. ML:从0到1 机器学习算法思路实现全部过程最强攻略
  5. Linux设置SSH登录(SecureCrt)
  6. user-agent
  7. 单调有界数列一定有极限
  8. 仿京东首页上侧导航左侧地址栏布局(1)
  9. Struts2自定义Result处理JSON
  10. Java高新技术第一篇:类加载器详解