【问题标题】:How do I link this execlp program using ld in Windows?如何在 Windows 中使用 ld 链接这个 execlp 程序?
【发布时间】:2023-03-30 01:49:02
【问题描述】:

我正在使用来自 MinGW 的 gas(具体来说是 gcc、as 和 ld)在 Windows 中编译以下即将成为 shellcode...

    .text
    .globl _main
    .def   _main; .scl 2; .type 32; .endef
    #.extern _execlp
    .def   _execlp; .scl 2; .type 32; .endef
_main:
    push  %ebp
    movl  %esp, %ebp
    pushl $0
    pushl $0x00657865
    pushl $0x2e646d63
    call  _execlp
    movl  %ebp, %esp
    pop   %ebp

使用...编译得很好

as -o ex.o ex.s

其中 ex.s 是程序集源文件。

但是在链接过程中...

ld -o ex.exe ex.o

它给出了错误...

ex.o:fake:(.text+0x10): undefined reference to 'execlp'

所以我试着让它成为一个外部推杆......

.extern _execlp

...定义在上面(注释)。

同时,我有一个包含此代码的 .c 文件(最初生成 ex.s 文件(使用 gcc -S -m32 -o ex.s ex.c))...

#include <process.h>
int main(int argc, char *argv[])
{
   execlp("cmd.exe", 0);
   return 0;
}

当编译时...

gcc -o exc.exe exc.c

其中 exc.c 是 c 文件。它编译并运行所需的功能...... 所以我使用 Dependency Walker 来查找 exc.exe 使用的 DLL,它发现 kernel32.dll、ntdll.dll 和 msvcrt.dll 正在被使用。 msvcrt 很重要,因为它是 c 运行时库(包含 execlp)。 所以我试着像这样链接 ex.o...

ld -lkernel32 -lndtll -lmsvcrt -o ex.exe ex.o

...与

.extern _execlp

...在注释所在的源文件(例如)中定义。

它产生了与上面完全相同的链接错误...

我做错了什么?

【问题讨论】:

  • 尝试将-l 开关放在对象之后。众所周知,ld 的某些版本很挑剔。还可以尝试删除下划线,某些版本会自动添加。更新:实际上您需要使用带有 2 个下划线的 __execlp,所以不要删除而是再添加一个 :)
  • 切换位置没有帮助。 execlp 的遗留函数可以使用下划线,即使它没有将下划线识别为气体(确实如此),它仍然会调用参数和功能相同的 _execlp。下划线只是宝宝喜欢的方式(气体),所以我不会胡闹。还是卡住了……
  • 我测试过,你需要2个下划线。至少这是我的 msvcrt 中唯一的版本。
  • 在execlp(__execlp)前改成两个下划线,依然不爽。编辑:“它仍然会调用 [execlp]”。对不起。
  • __execv 工作得很好......

标签: assembly mingw gnu-assembler shellcode


【解决方案1】:

您需要使用 2 个下划线并在目标文件之后列出库。 此外,您错误地传递了参数。这对我有用:

    .globl _main
_main:
    push  %ebp
    movl  %esp, %ebp
    pushl $0x00657865
    pushl $0x2e646d63
    pushl $0
    lea 4(%esp), %eax
    pushl %eax
    call  __execlp

组装:as -o ex.o ex.s

链接:ld -o ex.exe ex.o -lkernel32 -lmsvcrt

【讨论】:

    猜你喜欢
    • 2019-08-14
    • 1970-01-01
    • 2015-05-17
    • 2012-02-07
    • 2016-05-18
    • 2018-08-12
    • 2015-10-13
    • 2011-10-20
    • 2021-05-27
    相关资源
    最近更新 更多