ld_preload和memcpy,指针写入注入的程序指向NOP

时间:2013-10-13 13:59:53

标签: c++ pointers memcpy

所以我有一个函数我想改变程序中的参数。我已经反汇编它,看看这个函数采用了什么参数,并且我已成功写入该参数(其中有一个指针)。我写入内存的指针会覆盖已存在的指针,它应该指向一个预先初始化的字符数组,但是当我更仔细地检查内存时,它实际指向一些随机的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被触发时,我正在编写0x084632A9的指针以解决new_SV_trigger的问题,但效果很好(还不清楚为什么memcpy不会让我通过{{1}在第二个参数中,它总是将char数组的内容复制到内存中,而不是指向索引0的实际指针,无论如何)。

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

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

0 个答案:

没有答案