calling conventionはcdeclが使われる.
void some_func(int v1, int v2);
high addr | v2 |
---|---|
v1 | |
帰る時のret addr | |
前のebp | |
local variables | |
low addr | … |
gets(buf)を2回呼ぶなら,
rop.raw(p32(elf.sym['gets'])) rop.raw(p32(pop_one)) rop.raw(p32(buf))
rop.raw(p32(elf.sym['gets'])) rop.raw(p32(pop_one)) # この後がどうでもいいなら適当な4bytesでいい rop.raw(p32(buf))
aaa(A, B)を2回呼ぶなら
rop.raw(p32(elf.sym['aaa'])) rop.raw(p32(pop_two)) rop.raw(p32(A))
rop.raw(p32(B))
rop.raw(p32(elf.sym['aaa '])) rop.raw(p32(pop_two)) # この後がどうでもいいなら適当な4bytesでいい rop.raw(p32(A))
rop.raw(p32(B))