gdb查看内存中所有的信息
他们会把做内核的人当成无所不能的,认为你们对反编译啥的都应该会。
俗话说的好,人要活成别人想要的样子嘛:
看下如何停止进程,让大家看到内存中到底是啥样子;
简单的print globalA当然能输出来变量globalA的地址以及这个地址中的值,但是如果这里是一个链表,能通过编程的方法把这里的数值给dump出来么,直接就dump函数么,两个思路吧,要么是代码中自己写一个函数供调用,要么是我自己写一个外挂程序去调用。
第一种方法:
第一种方法可以,借助gdb的call 功能,就能让程序去执行特定的调测函数,测试程序:call showNode(root)就可以了
https://github.com/honpey/codebox/blob/master/gdb/gdb_call.c
第二种方法:gdb能不能开一个外观呢?gdb自己写函数去调用
还是先从最简单的动态库开始,我先在动态库中作函数
#include <stdio.h>
int max(int a, int b) {
return (a>b)?a:b;
}
int min(int a, int b) {
return (a<b)?a:b;
}
void sayhello() {
printf("hello libso\n");
}
其中max和min函数都不依赖外部的函数,都是raw的,可以直接调用,此时甚至都不需要什么动态库,直接静态的就好,但是后面由于需要有sayhello,因此需要有plt的重定位的加持。
可以看到max函数位于.text段的这个位置(odjdump -d cal.so):0x00000000000006e0;min位于0x00000000000006f6
那么text段的偏移(readelf -S cal.so)是005e0,大小是13f,所以整个代码段的大小是[005e0, 0071f)这么大的位置
上面两个函数相互相互印证吧,我们看到0x6e0/6f6确实是位于[005e0, 0071f)这个区间内,那么案例说,我直接去执行这个地址就能得到max和min的结果, 试验成功,
步骤:
1) gdb gdb_call 22044
2) call open("cal.so", 2)
3) call mmap(0, 4096, 1|2|4, 1, 3, 0)
4) set $addr=$addr_base+0x6e0 //$addr_base= /proc/22044/maps得到
5) call $addr(1, 100) 就真的返回100了
这个倒是简单,对于动态加载的呢?
先看下反汇编的函数:
void sayhello() {
printf("hello libso\n");
}
------->
000000000000070c <sayhello>:
70c: 55 push %rbp
70d: 48 89 e5 mov %rsp,%rbp
710: 48 8d 3d 12 00 00 00 lea 0x12(%rip),%rdi # 729 <_fini+0x9>
717: e8 a4 fe ff ff callq 5c0 <puts@plt>
71c: 90 nop
71d: 5d pop %rbp
71e: c3 retq
编译其看到这里的5c0会咋整?
内容很多,下面一篇详细介绍吧
gdb查看内存中所有的信息的更多相关文章
- MIUI添加内存调试工具:查看进程中的Bitmap信息
Android开发中的内存管理一直是令人头痛的事情.其中占用内存最大的一般是Bitmap. 在上周五发布的MIUI开发版中,我添加了查看内存里Bitmap信息的功能.大家开发app的时候可以使用这 ...
- GDB查看内存(x 命令)
gdb查看内存命令 首先使用gdb [YourFileName].c进入gdb界面 使用examine命令,字母缩写为x查看内存地址的值.x命令语法 x/[number][format] <ad ...
- GDB查看内存命令(x命令) 用gdb查看指定地址的内存内容
GDB查看内存命令(x命令) - super119 - 博客园 https://www.cnblogs.com/super119/archive/2011/11/18/2254382.html 可以使 ...
- x/nfu-用gdb查看内存
用gdb查看内存 2007-12-08 12:43 用gdb查看内存 格式: x /nfu <addr> 说明x 是 examine 的缩写 n表示要显示的内存单元的个数 f表示显示方式, ...
- Android 设备,如何root,执行adb shell,查看设备中的数据库信息等【转】
原文地址: Android 设备,如何root,执行adb shell,查看设备中的数据库信息等
- Xcode如何查看内存中的数据
在 debug 模式下如何在断点处,查看字符指针变量内存中的值,像vs2008的调试工具一样的内存查看器,现在只能查看第一个内存中的值可以在输出窗口采用gdb命令:x /nfu <addr&g ...
- aix 查看内存,CPU 配置信息
内存lsattr -El mem0cpu lsdev -C |grep procCPU的信息lsattr -El proc0 #bootinfo -r查看物理内存 使用命令# lsdev ...
- gdb查看内存(转)
可以使用examine命令(简写是x)来查看内存地址中的值.x命令的语 法如下所示: x/<n/f/u> <addr> n.f.u是可选的参数. n是一个正整数,表示需要显示的 ...
- Xcode debug时如何查看内存中的数据
对于IPhone开发/XCode的初学者,如何在调试时查看变量的值是很头痛的事情.因为Xcode的expression 经常无法正确显示变量的值.但是强大的GDB可以很方便的帮我们查看变量的值. ...
随机推荐
- 2018 Wannafly summer camp Day3--Shopping
Shopping 描述 题目描述: 你要买n件物品,其中有一些是凳子. 商场正在举行促销活动,如果购物车中有至少一个凳子,那么你可以半价购买这个购物车中最贵的一个物品. 你有m辆购物车,请最小化你的花 ...
- 日常工作linux常用命令
1:cp 复制文件/文件夹 cp -r 源目录 目标目录 2:mv 文件重命名 mv 源文件/源目录 目标文件/目标目录 3:du -sh 查看当前目录大小 du -l 查看当前目录下文件大小 d ...
- 在Closing事件中,将e.Cancle设置成true,则Windows无法关机和重启系统的解决办法
最近在设计一个WinForm程序的时候遇到一个bug,就是From1窗体的关闭事件中设置了e.Cancle设置成true,导致系统无法关机重启,windows7 和windows xp都是这样. 我这 ...
- Java语言利用Collections.sort对Map,List排序
1.main方法包含TreeMap排序1,TreeMap排序2,HashMap排序,List<Integer>排序,List<Bean>排序,List<Map>排序 ...
- SVN配置自启动-1053错误
主要内容:解决启动“配置的svn自启动服务”报1053错误 1. 环境: 系统: wind10 svn服务端版本: VisualSVN-Server-3.8.0-x64 2. 配置自启动 以管理员身份 ...
- 帆软中使用switch将控件的显示值“传递”给单元格
如下图,控件的实际值和显示值是我们自定义的. 当我们选择控件时,想要在某个单元格内显示控件的显示值.一般我们在单元格内直接 $控件名 可以获得控件值.比如当我们选择事故数时,我们自然不能在单元格内直 ...
- python3 练习题100例 (二十三)与7相关的数
与7相关的数:如果一个正整数,它能被7整除或者它的十进制表示法中某个位数上的数字为7,则称之为与7相关的数.(10分) 题目内容: 现在我们给定一个正整数n(n<1000),求所有小于等于n的与 ...
- C++常量(const)的使用
#include <iostream> using namespace std; class MyClass { public: int GetValue() const ; int Ge ...
- 2018年第九届蓝桥杯【C++省赛B组】【第二题:明码】
参考:https://blog.csdn.net/qq_34202873/article/details/79784242 #include <bits/stdc++.h> using n ...
- POLYGON(动态规划)
学校老师布置的一道动规的题目,要求下次上课前AC.周一一放学就回家写,调试了一会儿OK了.在这边记录一下解题的思路和过程,也作为第一篇随笔,就是随便之一写,您也就随便之一看.有问题望你指出,多多包涵. ...