【问题标题】:Will addresses (in the stack) of an instruction from a program will ever change?程序中指令的地址(在堆栈中)会改变吗?
【发布时间】:2019-02-02 03:43:46
【问题描述】:

我是低级利用的初学者。我正在练习简单的缓冲区溢出(基于堆栈)。我正在使用 Kali Linux,所以当我 $objdump -d <program> 并且它返回时(假设):

================================================ ===

0000000000400590:主要

400590 推...

400600 异或 ...

400610 呼叫...

...

================================================ ===

我知道这是一个不好的例子,但我的问题是地址400590 是否会永远保持在push ... 上,而地址400600 是否会永远保持在xor ... 上,并且与400610 一样吗?程序的特定指令是否会永远停留在地址上?

【问题讨论】:

    标签: reverse-engineering exploit


    【解决方案1】:

    是的,编译器/链接器分配代码地址,因此除非重新编译(或修补)应用程序,否则这些地址不会改变。

    【讨论】:

    • 对了,我想询问更多信息(因为我是菜鸟): 1. 如果两个程序使用相同的地址怎么办 2. 这与本主题不太相关,可能听起来对你来说是个愚蠢的问题。先生,指令是存储在堆栈中,还是由CPU逐行执行?
    • 在当今几乎所有的操作系​​统上,每个进程都有自己独立的地址空间,因此可以使用多个程序,例如0x400000 作为它们的基地址,没有冲突。
    猜你喜欢
    • 1970-01-01
    • 2016-05-26
    • 2012-04-21
    • 2021-09-09
    • 2014-10-14
    • 2013-08-23
    • 2011-02-02
    • 1970-01-01
    相关资源
    最近更新 更多