Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
以编程方式使用ptrace修改全局变量_C_Ptrace - Fatal编程技术网

以编程方式使用ptrace修改全局变量

以编程方式使用ptrace修改全局变量,c,ptrace,C,Ptrace,我一直在玩ptrace,看看是否可以在C程序中修改简单全局整数的值。我知道我可以使用PEEKDATA和POKEDATA来实现这一点。但是,这些需要关于变量存储在内存中的位置的信息才能起作用。我搜索过的所有教程似乎都建议,最流行的方法是使用nm或objdump手动获取此地址。有没有一种方法可以在事先不知道变量地址甚至变量名的情况下(如下所示)以更高的编程方式执行此操作: 我还考虑过截取可以将整数作为参数的系统调用,虽然这会起作用,但我想知道是否有更可靠的方法来实现这一点。你想实现什么?“我还考虑过

我一直在玩
ptrace
,看看是否可以在C程序中修改简单全局整数的值。我知道我可以使用
PEEKDATA
POKEDATA
来实现这一点。但是,这些需要关于变量存储在内存中的位置的信息才能起作用。我搜索过的所有教程似乎都建议,最流行的方法是使用
nm
objdump
手动获取此地址。有没有一种方法可以在事先不知道变量地址甚至变量名的情况下(如下所示)以更高的编程方式执行此操作:


我还考虑过截取可以将整数作为参数的系统调用,虽然这会起作用,但我想知道是否有更可靠的方法来实现这一点。

你想实现什么?“我还考虑过截取可以将整数作为参数的系统调用,虽然这会起作用”。真正地这将适用于所有情况,而不仅仅是某些特定情况?采用整数的系统调用通常与
i
或任何全局变量有什么关系?特别是,修改正在运行的进程的一些简单变量(最有可能是int)。我希望在尽可能少地了解子进程的情况下(以便它可以在许多进程上运行)以尽可能自动化的方式执行此操作。如果您不知道变量名和变量地址,识别目标变量的具体标准是什么?@user979616内存只保存整数-所以选择任何东西,它都是整数!“名字”是地址。您可以尝试通过调试/其他信息查找人类可读的名称,这与
nm
objdump
做的事情是一样的。您想实现什么?“我还考虑过截取可以将整数作为参数的系统调用,尽管这样做可行”。真正地这将适用于所有情况,而不仅仅是某些特定情况?采用整数的系统调用通常与
i
或任何全局变量有什么关系?特别是,修改正在运行的进程的一些简单变量(最有可能是int)。我希望在尽可能少地了解子进程的情况下(以便它可以在许多进程上运行)以尽可能自动化的方式执行此操作。如果您不知道变量名和变量地址,识别目标变量的具体标准是什么?@user979616内存只保存整数-所以选择任何东西,它都是整数!“名字”是地址。您可以尝试在调试/其他信息中查找人类可读的名称,这与
nm
objdump
do是一样的。
int i=0; //Assume i is defined globally and is the first integer defined in the code
//Code to modify i (this is what I'm looking for)
//More code here
//Print modified value of i
//Restore value of i later on