关于手动扩栈 OJ 上 RE 的问题

学术版

这是直接内联汇编修改栈顶指针吗……
by 123456zmy @ 2021-02-27 20:24:54


此代码在我这里连编译都过不了 ``` Assembler messages: Error: unsupported instruction 'mov' ```
by 123456zmy @ 2021-02-27 20:30:59


@[123456zmy](/user/44840) 这个东西的原理我也不是很了解......所以才发帖问,在 OJ 上能过编译(但是会 RE),本地上不行。
by abcdeffa @ 2021-02-27 20:31:59


按照我的理解加了点注释 ```cpp int size = 256 << 20; // 256MB char *p = (char*)malloc(size) + size; //申请内存空间并获得其地址 __asm__("movl %0, %%esp\n" :: "r"(p));//通过汇编将程序栈顶指针改为申请的内存的地址 ``` 应该是 OJ 为了防止恶意攻击,禁止了这种操作
by 123456zmy @ 2021-02-27 20:39:50


@[123456zmy](/user/44840) 感谢!但是之前做题被卡栈的时候用这个是可以的(同 OJ)。所以猜想是不是有什么东西,导致这个用不了。
by abcdeffa @ 2021-02-27 20:42:22


不能和 O2 一起使用大概是因为 O2 对程序进行了一些优化,导致不能直接进行这个操作
by 123456zmy @ 2021-02-27 20:42:52


|