问题标签 [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 投票
0 回答
553 浏览

c++ - c++ - llvm 和运行时 jit

语境

Linux 64 位/osx 64 位。C++ (gcc 5.1, llvm 3.6.1)

到目前为止,我一直在我的项目中使用 gcc。我要创建的下一件事的问题是许可证。因此,我决定尝试一下 clang/llvm。

我的需求:运行时自我修改代码(以及用于静态分析和其他东西的编译器插件的非常宽松的许可证。)。

我用libgccjit玩了很多,它运行良好。

至于 llvm,我阅读了 Kaleidoscope 项目和一些文档,但还不清楚。

问题

我看到 llvm 有一些 jit 可能性,但我不确定它是否能够像 libgccjit 对 c++ 语言那样在运行时自行修改代码(更准确地说,扩展代码)。

我在这里只需要一个初学者,llvm 对我来说很大而且很新,所以非常欢迎任何足够专家的人来指导我。

0 投票
1 回答
499 浏览

self-modifying - 如何在具有独立 ROM 和 RAM 的真实硬件上运行 Klaus Dormann 的 6502 测试套件

我想运行Klaus Dormann 的完整 6502 测试套件来测试我的 Kansas Lava 6502 实现。然而,代码使用了自我修改(参见 的所有用法range_adr),虽然在仿真器中实现微不足道,但对于硬件实现来说并不是一个好兆头:程序映像需要存储在 ROM 上,因此回写将被基于寻址 ROM 或 RAM 支持的部分写入的任何路由写入黑洞。

当然,同样的问题既适用于将它合成到真正的 FPGA 中,也适用于在模拟器中运行它(低级 VHDL 或高级堪萨斯熔岩)。

有没有一种方法可以运行测试套件,而不需要长时间(就周期而言)暂停 CPU,将程序从一些不可寻址的 ROM 逐字节复制到全 RAM 内存中,然后初始化 CPU 和让它运行?我不想这样做,因为在启动时模拟这些额外的周期会大大减慢运行测试的速度。

0 投票
1 回答
367 浏览

self-modifying - 广泛支持自修改代码的语言?

哪些编程语言为自修改代码提供了最好的支持?特别是,由于程序需要大量使用自修改代码,我期待能够在不再需要某些代码部分后从内存中删除它们,从而释放内存。此外,如果能够使用某种序列号识别和索引例程(过程、函数等),这将是一个加分项,以便它们可以在运行时在内存中轻松管理(删除、克隆等) .

0 投票
0 回答
88 浏览

ios - 有没有可以用来运行自修改字节码描述的功能的虚拟机?

我希望能够运行自我修改代码,而无需将代码所在的内存实际标记为可执行文件。为此,我的计划是将代码表示为字节码,然后在解释器/vm 中运行字节码。

我的问题是,是否存在与传统硬件(CPU/堆栈/堆)密切对应的字节码指令集,并允许修改字节码所在的内存(假设我以某种方式将其映射到 VM 中)。

很高兴拥有:能够从 C/C++ 编译器定位字节码指令集,并且解释器/VM 在 CPU 和内存开销方面是“轻量级的”。

0 投票
1 回答
39 浏览

javascript - 控制在文本输入中输入的内容的显示(使用 JS)?

有没有办法用JS改变文本输入的显示?

例如:我在文本字段中输入:“请帮助”

我希望它在输入时直接显示(在文本输入中为:“help ******”

所以只是第二个单词会被改成“*****”,但是提交的时候要保持它的值

0 投票
1 回答
632 浏览

linux - 在自修改汇编代码中调用 mprotect 后仍然出现分段错误

我正在尝试学习一些堆栈溢出技术并在其中使用 shellcode。我能够成功使用一些基本的 shellcode。然后我开始exeve在汇编中使用并调用ls -l它,再次成功。现在我正在尝试使用相对寻址并摆脱代码中的空值。因此,我尝试了一个简单的自修改代码。我知道代码段是只读的,所以我尝试调用mprotect使其可写。我的代码仍然无法正常工作,并且在movb %al, 0x7(%esi). 如果有人可以让我深入了解我的代码中的错误之处,我将不胜感激。

0 投票
2 回答
403 浏览

c# - 延迟初始化后删除空检查

当一个人决定使用惰性初始化时,他通常必须为此付出代价。

基本上,他必须每次检查他的支持字段是否具有 null/nil 值。如果他能摆脱这种做法呢?当你成功初始化字段后,你就可以摆脱这个检查了,对吧?

不幸的是,大多数生产语言不允许您在运行时修改它们的函数,特别是从函数体中添加或删除单个指令,尽管如果明智地使用它会有所帮助。但是,在 C# 中,您可以使用委托(最初我发现它们,后来意识到为什么本机语言具有函数指针)和事件机制来模仿这种行为,从而导致性能不足,因为空检查只是移动到较低级别,但是不会完全消失。一些语言,例如 LISP 和 Prolog,允许您轻松地修改它们的代码,但它们几乎不能被视为生产语言。

在 Delphi 和 C/C++ 等本地语言中,最好编写两个函数,安全和快速,通过指针调用它们并在初始化后将此指针切换到快速版本。您甚至可以允许编译器或 IDE 生成代码来执行此操作,而无需额外头痛。但是正如@hvd 提到的,这甚至会降低速度,因为 CPU 不会知道这些功能几乎相同,因此不会将它们预取到它的缓存中。

是的,我是个性能狂,在没有明确问题的情况下寻求性能,只是为了满足我的好奇心。有哪些常用方法来开发此类功能?

0 投票
1 回答
183 浏览

python - 将自身修改为 exe 的 Python 文件?

我搞乱了自我修改代码的想法,我想使用 py2exe 将文件更改为 .exe。我是否仍然可以让代码自行修改,还是需要将其保留为 .py?

自修改代码:

0 投票
1 回答
76 浏览

bash - bash 你能写一个脚本文件在下次调用时修改自己吗?

举个例子,我想编写一个脚本文件,它不仅可以计算它被调用的次数,还可以计算自第一次调用以来的平均时间。并在不依赖环境变量或辅助文件的情况下做到这一点。并报告过去的天数。这意味着它必须是自我修改的。现在,当加载并执行脚本时,可以更改磁盘上保存的版本,而不会影响内存中的副本,这样就可以了,或者应该。只需更改文件上的副本即可。

但是实现它可能有点棘手。那么你最好的解决方案是什么?

0 投票
2 回答
847 浏览

performance - x86_64 - 自修改代码性能

我正在阅读英特尔架构文档,vol3,第 8.1.3 节

与非自修改或普通代码相比,自修改代码将以较低的性能水平执行。性能恶化的程度将取决于修改频率和代码的具体特性。

所以,如果我尊重规则:

(* OPTION 1 *) 将修改后的代码(作为数据)存储到代码段中;跳转到新代码或中间位置;执行新代码;

(* 选项 2 ) 将修改后的代码(作为数据)存储到代码段中;执行序列化指令;(例如CPUID指令*)执行新代码;

并且每周修改一次代码,我应该只在下次修改此代码并即将执行时支付罚款。但在那之后,性能应该与未​​修改的代码相同(+ 跳转到该代码的成本)。

我的理解正确吗?