Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python LD#u preload用于使用其他版本的libc、isn';t在pwntools中工作_Python_Pwntools - Fatal编程技术网

Python LD#u preload用于使用其他版本的libc、isn';t在pwntools中工作

Python LD#u preload用于使用其他版本的libc、isn';t在pwntools中工作,python,pwntools,Python,Pwntools,我想在pwntools中使用其他版本的库进行pwn研究,但出现了EOF错误 我试图解决这个问题,更改ubuntu版本3次(18.04桌面->14.04桌面->18.04.0服务器),重新安装python和pwntools 4次。 目前,版本有ubuntu 18.04.0服务器、Python 2.7.15rc1、pwntools 3.12.2 我尝试在pwntools中使用其他版本的库来学习pwn。 像这样: p = process("./binary_name",env={"LD_PRE

我想在pwntools中使用其他版本的库进行pwn研究,但出现了EOF错误

我试图解决这个问题,更改ubuntu版本3次(18.04桌面->14.04桌面->18.04.0服务器),重新安装python和pwntools 4次。 目前,版本有ubuntu 18.04.0服务器、Python 2.7.15rc1、pwntools 3.12.2

我尝试在pwntools中使用其他版本的库来学习pwn。 像这样:

    p = process("./binary_name",env={"LD_PRELOAD" : "./libc_name"})
也试过了

    env = {"LD_PRELOAD": os.path.join(os.getcwd(), "libc_name")}
    p = process("./binary_name",env=env)
执行python代码时,出现错误 我已经将libc的permisson设置为chmod 777,但结果是一样的

    [*] Process './aeiou' stopped with exit code -4 (SIGILL) (pid 77469)
    Traceback (most recent call last):
    File "ex4.py", line 6, in <module>
    p.sendlineafter(">>","3")
    File "/home/synod2/.local/lib/python2.7/site- packages/pwnlib/tubes/tube.py", line 747, in sendlineafter
    ~~~~~~~~~~~~~~
    EOFError
[*]进程“/aeiou”已停止,退出代码为-4(SIGILL)(pid 77469)
回溯(最近一次呼叫最后一次):
文件“ex4.py”,第6行,在
p、 sendlineafter(“>>”,“3”)
sendlineafter中的文件“/home/synod2/.local/lib/python2.7/site-packages/pwnlib/tubes/tube.py”,第747行
~~~~~~~~~~~~~~
伊奥费罗
我不知道为什么会发生EOF错误。但是,由于3个不同版本的ubuntu给出了相同的错误,我想我错过了一些安装。
但我不知道我错过了什么

也许你应该在Ubuntu 16上试试

显然,二进制文件是动态链接的。所以当程序需要调用一些libc函数时,比如read。它将向动态链接器传递一些信息,然后链接器将计算读取函数的实际地址

但是libc中的函数有一个version属性。所以如果你尝试在Ubuntu 18.04上使用LD_预加载。动态链接器会试图在you 2.23-version-libc中找到像read_2_27这样的东西,而you 2.23-version-libc只有read_2_23。因此,您的程序将无法执行


更新:

另一个解决方案是告诉可执行文件使用正确版本的ld.so

elf文件有一个段(INTERP),其中保存要使用的ld.so的路径。您只需将其更改为ld的路径,以便使用

顺便说一句,您可以在