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可以很方便的帮我们查看变量的值. ...
随机推荐
- jzoj5195. 【NOIP2017提高组模拟7.3】A(递推,打表)
Description
- 服务命令只支持基本的LSB操作(启动、停止、重新启动、尝试重启、重新加载、强制重新加载、状态)。对于其他操作,请尝试使用systemctl。
The service command supports only basic LSB actions (start, stop, restart, try-restart, reload, forc ...
- jquery点击按钮复制内容
做移动端的项目遇到一个需求要点击按钮复制dom里的内容,看了很多资料显示必须textarea或者input里的内容才能简单复制,还有就是用插件的了,最终都因为遇到各种问题放弃,最终选择了最简单的点击复 ...
- 【路由和交换之H3C自导自演】
H3C配置自导自演 显示和维护及恢复 1:display display history-command :查看历史命令记录 display diagnostic-information :查看 ...
- Nginx反向代理 Laravel获取真实IP地址(PHP)
使用VUE前后端分离开发 后端使用Laravel 想要获取到用户的真实IP地址 因为分离开发不同源跨域问题 所以只能进行前端Nginx反向代理 location /api { rewrite ^/a ...
- QOS-基本拥塞管理机制(PQ CQ WFQ RTPQ)
QOS-基本拥塞管理机制(PQ CQ WFQ RTPQ) 2018年7月7日 20:29 拥塞:是指当前供给资源相对于正常转发处理需要资源的不足,从而导致服务质量下降的一种现象 拥塞管理概述: ...
- Python3爬虫(十二) 爬虫性能
Infi-chu: http://www.cnblogs.com/Infi-chu/ 一.简单的循环串行一个一个循环,耗时是最长的,是所有的时间综合 import requests url_list ...
- (数据科学学习手札12)K-means聚类实战(基于R)
上一篇我们详细介绍了普通的K-means聚类法在Python和R中各自的实现方法,本篇便以实际工作中遇到的数据集为例进行实战说明. 数据说明: 本次实战样本数据集来自浪潮集团提供的美团的商家信息,因涉 ...
- linux ln 建立软链接-- 基于dubbo-zookeeper服务的 服务jar 引用公共的 lib
对于ln命令网上有很多的教程,这里不再复述, 其基本目的是:多个文件夹公用一个文件夹的里的文件. 其基本命令格式: ln [option] source_file dist_file (source_ ...
- 在linux使用锐捷客户端上网(华中科技大学)
第一步:下载锐捷客户端linux版本,下载网址为http://ncc.hust.edu.cn/cyxz/rzkhd.htm 第二步:解压该包,进入目录 #unzip RG_Supplicant_For ...