在自定义地址启动/执行具有初始堆栈的进程

问题描述

我想在 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 进程创建的一些黑暗特性就好了!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)