他们会把做内核的人当成无所不能的,认为你们对反编译啥的都应该会。

俗话说的好,人要活成别人想要的样子嘛:

看下如何停止进程,让大家看到内存中到底是啥样子;

简单的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查看内存中所有的信息的更多相关文章

  1. MIUI添加内存调试工具:查看进程中的Bitmap信息

    Android开发中的内存管理一直是令人头痛的事情.其中占用内存最大的一般是Bitmap.   在上周五发布的MIUI开发版中,我添加了查看内存里Bitmap信息的功能.大家开发app的时候可以使用这 ...

  2. GDB查看内存(x 命令)

    gdb查看内存命令 首先使用gdb [YourFileName].c进入gdb界面 使用examine命令,字母缩写为x查看内存地址的值.x命令语法 x/[number][format] <ad ...

  3. GDB查看内存命令(x命令) 用gdb查看指定地址的内存内容

    GDB查看内存命令(x命令) - super119 - 博客园 https://www.cnblogs.com/super119/archive/2011/11/18/2254382.html 可以使 ...

  4. x/nfu-用gdb查看内存

    用gdb查看内存 2007-12-08 12:43 用gdb查看内存 格式: x /nfu <addr> 说明x 是 examine 的缩写 n表示要显示的内存单元的个数 f表示显示方式, ...

  5. Android 设备,如何root,执行adb shell,查看设备中的数据库信息等【转】

    原文地址: Android 设备,如何root,执行adb shell,查看设备中的数据库信息等

  6. Xcode如何查看内存中的数据

    在  debug 模式下如何在断点处,查看字符指针变量内存中的值,像vs2008的调试工具一样的内存查看器,现在只能查看第一个内存中的值可以在输出窗口采用gdb命令:x /nfu <addr&g ...

  7. aix 查看内存,CPU 配置信息

    内存lsattr -El mem0cpu lsdev -C |grep procCPU的信息lsattr -El proc0   #bootinfo -r查看物理内存     使用命令#  lsdev ...

  8. gdb查看内存(转)

    可以使用examine命令(简写是x)来查看内存地址中的值.x命令的语 法如下所示: x/<n/f/u> <addr> n.f.u是可选的参数. n是一个正整数,表示需要显示的 ...

  9. Xcode debug时如何查看内存中的数据

    对于IPhone开发/XCode的初学者,如何在调试时查看变量的值是很头痛的事情.因为Xcode的expression 经常无法正确显示变量的值.但是强大的GDB可以很方便的帮我们查看变量的值.   ...

随机推荐

  1. 2018 Wannafly summer camp Day3--Shopping

    Shopping 描述 题目描述: 你要买n件物品,其中有一些是凳子. 商场正在举行促销活动,如果购物车中有至少一个凳子,那么你可以半价购买这个购物车中最贵的一个物品. 你有m辆购物车,请最小化你的花 ...

  2. 日常工作linux常用命令

    1:cp 复制文件/文件夹 cp -r  源目录 目标目录 2:mv 文件重命名 mv 源文件/源目录  目标文件/目标目录 3:du -sh 查看当前目录大小 du -l 查看当前目录下文件大小 d ...

  3. 在Closing事件中,将e.Cancle设置成true,则Windows无法关机和重启系统的解决办法

    最近在设计一个WinForm程序的时候遇到一个bug,就是From1窗体的关闭事件中设置了e.Cancle设置成true,导致系统无法关机重启,windows7 和windows xp都是这样. 我这 ...

  4. Java语言利用Collections.sort对Map,List排序

    1.main方法包含TreeMap排序1,TreeMap排序2,HashMap排序,List<Integer>排序,List<Bean>排序,List<Map>排序 ...

  5. SVN配置自启动-1053错误

    主要内容:解决启动“配置的svn自启动服务”报1053错误 1. 环境: 系统: wind10 svn服务端版本: VisualSVN-Server-3.8.0-x64 2. 配置自启动 以管理员身份 ...

  6. 帆软中使用switch将控件的显示值“传递”给单元格

    如下图,控件的实际值和显示值是我们自定义的. 当我们选择控件时,想要在某个单元格内显示控件的显示值.一般我们在单元格内直接 $控件名  可以获得控件值.比如当我们选择事故数时,我们自然不能在单元格内直 ...

  7. python3 练习题100例 (二十三)与7相关的数

    与7相关的数:如果一个正整数,它能被7整除或者它的十进制表示法中某个位数上的数字为7,则称之为与7相关的数.(10分) 题目内容: 现在我们给定一个正整数n(n<1000),求所有小于等于n的与 ...

  8. C++常量(const)的使用

    #include <iostream> using namespace std; class MyClass { public: int GetValue() const ; int Ge ...

  9. 2018年第九届蓝桥杯【C++省赛B组】【第二题:明码】

    参考:https://blog.csdn.net/qq_34202873/article/details/79784242 #include <bits/stdc++.h> using n ...

  10. POLYGON(动态规划)

    学校老师布置的一道动规的题目,要求下次上课前AC.周一一放学就回家写,调试了一会儿OK了.在这边记录一下解题的思路和过程,也作为第一篇随笔,就是随便之一写,您也就随便之一看.有问题望你指出,多多包涵. ...