首页 > 解决方案 > 在自定义地址启动/执行具有初始堆栈的进程

问题描述

我想更改linux上程序的起始堆栈地址。

我检查了一下内核源代码,发现了

extern void start_thread(struct pt_regs *regs, unsigned long new_ip,
                           unsigned long new_sp);

来自 https://github.com/torvalds/linux/blob/29c395c77a9a514c5857c45ceae2665e9bd99ac7/arch/x86/include/asm/processor.h

但是我没有找到从外部(内核)影响它的方法。

理想情况下,我的操作系统(debian)的一些配置用于定义的程序将是完美的。但我不知道该怎么做......

我知道一些与堆栈相关的函数,例如 setrlimit() 和 ulimit() ,但这并不能胜任。

可能是 gdb 有一些这样的功能吗?(如果程序在 gdb 中运行,这不是问题。)

既然是自己写的程序,我也想过在程序启动的时候做一个大的malloc,把esp/ebp改成指向它。但这并不理想。

如果有人知道 Linux 进程创建的一些黑暗特性,那就太好了!

标签: clinuxassemblystackcallstack

解决方案


推荐阅读