gpt4 book ai didi

c - 执行的shellcode终止主程序

转载 作者:行者123 更新时间:2023-11-30 16:46:00 24 4
gpt4 key购买 nike

我正在尝试在内存区域中执行 shellcode。虽然到目前为止它有效,但我现在面临另一个问题:在调用 shellcode 程序后,main-c 程序退出。除了使用线程之外,还有其他(简单的)方法可以解决这个问题吗?

我认为这与mov rax, 60和后面的syscall退出程序有关。对吗?

主 C 代码

#include <string.h>
#include <sys/mman.h>

const char shellcode[] = "\xeb\x1e\xb8\x01\x00\x00\x00\xbf\x01\x00\x00\x00\x5e\xba\x0d\x00\x00\x00\x0f\x05\xb8\x3c\x00\x00\x00\xbf\x00\x00\x00\x00\x0f\x05\xe8\xdd\xff\xff\xff\x48\x65\x6c\x6c\x6f\x2c\x20\x57\x6f\x72\x6c\x64\x21";

// Error checking omitted for expository purposes
int main(int argc, char **argv)
{
// Allocate some read-write memory
void *mem = mmap(0, sizeof(shellcode), PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS, -1, 0);

// Copy the shellcode into the new memory
memcpy(mem, shellcode, sizeof(shellcode));

// Make the memory read-execute
mprotect(mem, sizeof(shellcode), PROT_READ|PROT_WRITE|PROT_EXEC);

// Call the shellcode
void (*func)();
func = (void (*)())mem;
(void)(*func)();

// This text will never appear
printf("This text never appears");

// Now, if we managed to return here, it would be prudent to clean up the memory:
// (I think that this line of code is also never reached)
munmap(mem, sizeof(shellcode));

return 0;
}

Shellcode 基础(汇编程序(英特尔))

global _start

_start:
jmp message

code:
mov rax, 1
mov rdi, 1
pop rsi
mov rdx, 13
syscall

mov rax, 60
mov rdi, 0
syscall

message:
call code
db "Hello, World!"

最佳答案

imo 最简单的方法是创建一个二进制文件,然后 exec() 。如果您需要输出,请设置管道。

关于c - 执行的shellcode终止主程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43912394/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com