问题标签 [self-modifying]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
206 浏览

c - 自修改代码中可能的指令缓存同步问题?

很多相关问题< x86指令缓存如何同步?> 提到 x86 应该在自修改代码中正确处理 i-cache 同步。我编写了以下代码,它可以在与执行交错的不同线程中打开和关闭函数调用。我使用比较和交换操作作为额外的保护,以便修改是原子的。但是我遇到了间歇性崩溃(SIGSEGV、SIGILL)并且分析核心转储让我怀疑处理器是否正在尝试执行部分更新的指令。下面给出代码和分析。可能是我在这里遗漏了一些东西。让我知道是否是这种情况。

切换.c

核心转储分析

因此可以看出,指令指针似乎位于 CALL 指令内的地址内,处理器显然正试图执行该未对齐的指令,从而导致非法指令错误。

0 投票
2 回答
416 浏览

c - 使用 gcc 修改内存中的下一条指令

我想在获取之前修改下一条指令,在 foo 函数中这篇文章*p的最佳答案中,指向主函数中的下一条指令。我想修改 where*p点的内容。例如,我想将下一条指令更改为跳转指令。我该怎么做?

我想在 intel Core-i7 3632QM 处理器上使用 gcc 编译器来执行此操作。

0 投票
1 回答
404 浏览

python - 自我修改 Python 代码以跟踪高分

我考虑将我的游戏的高分存储为代码本身的变量,而不是像我目前所做的那样存储为文本文件,因为这意味着运行它所需的额外文件更少,并且分配 999999 分变得更加困难。

但是,这将需要我运行自我修改代码来永久覆盖表示分数的全局变量。我对此进行了研究,并考虑到我想做的只是更改全局变量,我发现的所有东西都太高级了。

如果有人能给我解释一下如何编写自我修改的 Python 代码来做到一点,我将不胜感激,最好也提供一个示例,因为它有助于理解。

0 投票
1 回答
210 浏览

assembly - 如何判断ARM函数是不是用thumb写的

我正在编写修补 ARM 函数序言的 hooker 代码来做到这一点。由于 ARM 可以在两种模式下运行,Hooker 必须选择正确的操作码(拇指或否)来修补序言。

如何确定修补目标是使用拇指还是 32 位 ARM 指令?

0 投票
0 回答
288 浏览

android - Flush snapdragon instruction cache

I'm currently writing in-kernel hooker code on snapdragon machine (Nexus 5). My current hooker implementation is here.

https://github.com/perillamint/hideroot/blob/8c66dd8d515e0c8506ec6d229f296a8a1d24f293/gphook.c

I tested this code with Galaxy Note 2 (exynos 4412) and it works(Print Awesome! when sys_open is called. code: https://github.com/perillamint/hideroot/blob/8c66dd8d515e0c8506ec6d229f296a8a1d24f293/main.c). But when I run this code in Nexus 5 (MSM8974), instruction cache seems does not flushed at all.

How can I flush snapdragon's instruction cache?

0 投票
1 回答
155 浏览

assembly - 为什么这个汇编代码不修改自己

我想看看是否可以在汇编中进行自修改代码,因为.text它是只读的,我想我可以将代码放入.data,我尝试了下面的代码。

上面的输出是

虽然我期望2,因为在修改自身之后,它应该有一个减少指令而不是一个增加指令。我究竟做错了什么?

我正在运行 debian sid 64 位,并且正在编译:

0 投票
1 回答
179 浏览

android - 我可以编写覆盖自身的 Android 应用程序吗?

不管可发布性如何,是否有可能编写一个 android Java 应用程序,该应用程序在运行时会用一些其他随机代码覆盖自身并重新启动?更改后它是否仍然是可执行应用程序?我在哪里可以找到有关如何执行此操作的资源?

澄清一下,假设我有一个全新的 Foo 应用程序,并且在某处我有一个方法,

在应用程序执行的某个时刻,我希望它改变 getOne() 现在做

然后以某种方式重建应用程序,生活,以便一切都使用这种新方法?

谢谢!

0 投票
1 回答
439 浏览

assembly - 自修改代码看到 0xCC 字节但调试器不显示?

我正在尝试编写自我修改的 asm 代码。

在某些时候,我尝试以下方法:(NASM 编译器)

gdb 在开始时显示以下值x/8xb $rax

前两次迭代没问题,0x12按照我的预期进行比较并且没有发生跳转。0x11然而,设置cmp标志OFCF 不是jae执行

目前我有 2 个猜测,要么 gdb 没有首先报告正确的内存位置,要么 0x9b 实际上是正在比较的地址,或者其他地方。这似乎不太可能,因为添加似乎像我预期的那样工作。

或者这可能是对齐问题。在 cmp 之前添加 NOP 指令似乎会以某种方式影响结果。我真的不知道为什么

编辑:当我尝试

bl得到0xcc

这对我来说没有意义。gdb 不报告任何0xcc附近的任何值[rax]

0 投票
2 回答
1640 浏览

mips - 自修改 MIPS 代码

我正在尝试在 MIPS 中编写一个程序,该程序不断提示输入两个整数并打印总和,直到总和为 0。诀窍是,如果总和为 13,我需要调用一个方法来更改组装的 MIPS 代码,以便

变成

并且循环的所有后续运行都使用 and 指令。

我有求和循环工作,因此当总和为 13 时,调用 instMod 方法,我想修改指令。不幸的是,我不知道从哪里开始,也找不到任何在线示例。我假设我需要以某种方式从汇编代码中获取 add 的十六进制代码,并将其替换为 and 的十六进制代码,但我不知道该怎么做,或者这是否是正确的做法。

0 投票
1 回答
501 浏览

assembly - 汇编中的自修改代码

我将如何在 mips 32 程序集中编写自我修改代码,使一个函数调用另一个函数(而不在其中添加函数调用)?我必须在运行时修改函数的代码,以便它调用另一个函数。