c - 在自定义地址启动/执行具有初始堆栈的进程
问题描述
我想更改linux上程序的起始堆栈地址。
我检查了一下内核源代码,发现了
extern void start_thread(struct pt_regs *regs, unsigned long new_ip,
unsigned long new_sp);
但是我没有找到从外部(内核)影响它的方法。
理想情况下,我的操作系统(debian)的一些配置用于定义的程序将是完美的。但我不知道该怎么做......
我知道一些与堆栈相关的函数,例如 setrlimit() 和 ulimit() ,但这并不能胜任。
可能是 gdb 有一些这样的功能吗?(如果程序在 gdb 中运行,这不是问题。)
既然是自己写的程序,我也想过在程序启动的时候做一个大的malloc,把esp/ebp改成指向它。但这并不理想。
如果有人知道 Linux 进程创建的一些黑暗特性,那就太好了!
解决方案
推荐阅读
- python - 在与某些参数匹配的对象列表中查找值的总和
- c++ - 指向常量值的 const 指针示例
- jquery - 如何将特定代码添加到我的链接中?jQuery
- reactjs - React debounce search 在初始化之前无法访问'updateSearchQuery'
- ajax - 如何在基于算法的无限滚动中防止重复
- sql - 从数据中删除两个单引号
- mongodb - 管理数据库是否由分片 mongodb 集群中的 mongoses 缓存在内存中?
- java - 动态编程主题名称/Quarkus Smallrye 响应式消息传递 Kafka
- javascript - 在 TypeScript 中反应路由器访问参数
- c# - 'Func<,>' 类型在未引用的程序集中定义。您必须添加对程序集 'netstandard; 的引用;C#; 添加 ref 不起作用