0

所以我有一个函数我想改变程序中的参数。我已经对其进行了反汇编以查看此函数采用哪些参数,并且我已成功写入该参数(它需要一个指针)。我写入内存的指针会覆盖已经存在的指针,它应该指向一个预初始化的字符数组,但是当我更接近地检查内存时,它实际上指向一些随机 NOP。

这是我的 C++ LD_PRELOAD 补丁:

#include <unistd.h>
#include <stdio.h>

#include "hook.h"

char kick_patch[] = "Kicked";
const char* pkick_patch = kick_patch;

void new_SV_trigger()
{
    unsigned long kick_patch_p = 0x084632A9;
    printf("Kick patch string address: %X\n", &kick_patch);
    memcpy( (void*) kick_patch_p, &pkick_patch, 4);
}


void  __attribute__((constructor)) init (void)
{
    Hook h_SV_trigger( (void*) 0x081641D1, 5, (void*) new_SV_trigger );
}

如您所见,我正在编写指向何时触发的kick_patch地址的指针,效果很好(仍然不清楚为什么 memcpy 不会让我传入第二个参数,它总是将 char 数组的内容复制到内存中,而不是实际的指针无论如何都要索引0)。0x084632A9new_SV_trigger&kick_patch_p

这里的问题是,当我检查内存地址0x084632A9一切正常时,它已经写入了kick_patch我需要的第一个索引的指针,但是当我检查kick_patch它的内存地址时,它都是 NOP/0x00。

我不知道那里发生了什么。

4

0 回答 0