GOT不会覆盖

时间:2019-05-25 11:09:09

标签: c elf

我正在尝试覆盖GOT条目,以便调用ParallaxImageView ivBackground = findViewById(R.id.iv_background); ivBackground.setMargins(300, 200); ivBackground.setMultipliers(1.5f, 1.7f); 会调用printf(下面的system)。

callme

我的想法是在第一个// gcc source.c -no-pie -fno-pic -fno-stack-protector -g #include <stdio.h> #include <stdlib.h> void callme(char *p) { system(p); } int main(int argc, char **argv) { char *pointer = NULL; char array[10]; pointer = array; fgets(pointer, 18, stdin); printf("p contains %s at %p\n", pointer, &pointer); fgets(pointer, 8, stdin); printf("p contains %s at %p\n", pointer, &pointer); return EXIT_SUCCESS; } 中写入10个随机字符,并在第二个fgets中写入printf @ plt的地址。

callme

要尝试一下,我将使用一些A覆盖get

gef➤  p &pointer
$1 = (char **) 0x7fffffffdea8
gef➤  p &array
$2 = (char (*)[10]) 0x7fffffffde9e
gef➤  p (0x7fffffffde9e+10)
$3 = 0x7fffffffdea8

其中0x061020是获取位置的地址。

在第二个gef➤ r < <(printf "%010d\x20\x10\x60\x00\x00\x00\x00\x00" 0) <(perl -e "print 'A'x8") 之前

fgets

这很好,那么gef➤ x/g pointer 0x601020: 0x7ffff7a48e80 gef➤ x/i 0x7ffff7a48e80 0x7ffff7a48e80 <__printf>: sub rsp,0xd8 不会改变值,我也不会写到get。我希望在SIGSEGV的下一次调用*pointer时得到“ A” * 8,但它可以正常运行。

0 个答案:

没有答案