如何实现在线查看进程中的变量以及执行调试函数

本程序实现了查看进程中的全局变量,以及执行进程中的调试函数的功能。

程序运行后,init_symbol函数会创建一个线程,此线程从标准输入读取

用户输入的变量名或函数调用命令,然后输出相应的结果。

例如,

输入 my_var,即可查看变量my_var的信息。

输入 my_func(1, "good", 0x123) 即可使用输入的参数执行函数my_func

目前最大支持8个参数,且每个参数size必须等于sizeof(long)

my_func函数的各个入参就是一个符合要求的例子。

输入d(mem_addr, len)可以查看内存的内容

例如,

输入d(0x12345678, 32)即可查看内存地址0x12345678处的32个字节的内容。

运行效果:

[[email protected] ~]# cd linux-dev-framework

[[email protected] ~]# make

...

[[email protected] linux-dev-framework]# ./target/symbol_utils_test.exe

****symbol_shell started****

you can input var names to see var info

you can input d(addrress, len) to see memory contents

you can input xxx(1, 0x2, "abc") to execute function xxx

caution: every args‘s size of function xxx must == sizeof(long)

[symbol_shell]my_var

[var address] : 0x6030cc

[values] :

1 byte :0xd2               (-46)

2 bytes:0x4d2              (1234)

4 bytes:0x4d2              (1234)

8 bytes:0x63d87640000004d2 (7194630421974353106)

[symbol_shell]my_func(1, "hello", 0x64)

para1=1 para2=0x7fe8639cae1b para3=100

para2 contents = hello

[symbol_shell]

本程序源码在linux-dev-framework源码包中。

linux-dev-framework源码包的介绍:http://blog.csdn.net/crazycoder8848/article/details/22491525

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-06 14:01:32

如何实现在线查看进程中的变量以及执行调试函数的相关文章

辛星解析动态查看php中的变量、常量、函数、类、文件等信息

当我们php工作量变大之后,经常需要判断我们是否定义过某个变量,我们是否定义过某个常量,或者说我们是否定义过某个函数等等,我们重复定义常量会导致错误,我们重复定义变量会导致前面的值被覆盖,因此,还是很有必要去了解这些函数的. 比如说我在我的starphp框架里写一个文件,代码如下: <?php echo "当前用户定义的常量"; $user_constants = get_defined_constants(TRUE); print_r($user_constants['user

使用ptrace向已运行进程中注入.so并执行相关函数(转)

1. 简介 使用ptrace向已运行进程中注入.so并执行相关函数,其中的“注入”二字的真正含义为:此.so被link到已运行进程(以下简称为:目标进程)空间中,从而.so中的函数在目标进程空间中有对应的地址,然后通过此地址便可在目标进程中进行调用. 到底是如何注入的呢? 本文实现方案为:在目标进程中,通过dlopen把需要注入的.so加载到目标进程的空间中. 2. 如何让目标进程执行dlopen加载.so? 显然,目标进程本来是没有实现通过dlopen来加载我们想注入的.so,为了实现此功能,

使用ptrace向已运行进程中注入.so并执行相关函数

这个总结的很好,从前一个项目也用到这中技术 转自:http://blog.csdn.net/myarrow/article/details/9630377 1. 简介 使用ptrace向已运行进程中注入.so并执行相关函数,其中的“注入”二字的真正含义为:此.so被link到已运行进程(以下简称为:目标进程)空间中,从而.so中的函数在目标进程空间中有对应的地址,然后通过此地址便可在目标进程中进行调用. 到底是如何注入的呢? 本文实现方案为:在目标进程中,通过dlopen把需要注入的.so加载到

jQuery清除、停止队列中剩下(未执行的函数)

<!DOCTYPE html><html><head> <meta charset="utf-8"> <title>jQuery清除.停止队列中剩下(未执行的函数)</title> <script src="http://cdn.static.runoob.com/libs/jquery/1.10.2/jquery.min.js"> </script> <scrip

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

Android开发中的内存管理一直是令人头痛的事情.其中占用内存最大的一般是Bitmap. 在上周五发布的MIUI开发版中,我添加了查看内存里Bitmap信息的功能.大家开发app的时候可以使用这个功能来查看分析app中的Bitmap情况. 使用方法:adb shell dumpsys gfxinfo [package name] [-b] [-e] adb shell dumpsys gfxinfo是Android原有的功能.我在此之上添加了一些参数来输出Bitmap信息. -b会输出进程中所

查看进程中占cpu高的线程方法

当在任务管理器中发现有进程占用cpu过高的时候通过下面的指令将进程快照导出到c盘 jstack -l 进程PID> c:/进程PID.stack 查看进程PID的方法: 然后我们需要下载微软提供的process-explorer工具用来查看那个线程占cpu高 下载地址:https://docs.microsoft.com/zh-cn/sysinternals/downloads/process-explorer 下载后解压打开 然后找到threads下的占用cpu高的线程TID (注意:这里的T

根据进程id查看进程在做什么(执行的sq语句)

有时候会见到一个操作进程占用了很多系统资源,此时需要弄清楚这个进程是在干什么,将红色标记的部分替换成操作系统进程id(PID)即可. select distinct'-------------------------------------------'||chr(10)||'USERAME    :' || s.username   || chr(10) ||'SCHEMA     :' || s.SCHEMANAME || chr(10) ||'OSUSER     :' || s.osus

javascript遍历数组,针对数组中每一个元素执行fn函数,并将数组索引和元素作为参数传递

遍历主要有两种方法,i++方法和in关键词法 var list = [1, 2, 3, 4, 5, 6,7,8]; //var l = list.length; for(var i in list) { console.log(list[i]); } //[Finished in 0.3s] var list = [1, 2, 3, 4, 5, 6,7,8]; //var l = list.length; for(var i = 0; i < list.length; i++) { consol

学习笔记之卸载远程目标进程中的DLL模块(转)

学习笔记之卸载远程目标进程中的DLL模块 (2007-07-23 23:51:02) 转载▼ 学习笔记之卸载远程目标进程中的DLL模块2007/7/231.首先得把DLL模块中的线程结束使用CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,0);创建系统线程的快照然后用Thread32First()和Thread32Next()遍历系统中所有线程.将遍历到的线程保存到THREADENTRY32结构,然后判断结构中的th32OwnerProcessID成员是否与