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

c - x86 指令缓存如何同步?

我喜欢例子,所以我用c写了一些自修改代码......

...显然有效:

但老实说,我根本没想到它会起作用。我希望包含的指令c[2] = 0在第一次调用时被缓存c,之后所有连续调用c都会忽略对的重复更改c(除非我以某种方式明确地使缓存无效)。幸运的是,我的 cpu 似乎比这更聪明。

c我猜每当指令指针进行较大的跳转(如上面对 mmapped 内存的调用)时,cpu 都会将 RAM(假设甚至驻留在 RAM 中)与指令缓存进行比较,并在缓存不匹配时使缓存无效(全部?),但我希望能得到更准确的信息。特别是,我想知道这种行为是否可以被认为是可预测的(除非硬件和操作系统有任何差异),并且可以依赖?

(我可能应该参考英特尔手册,但那东西长达数千页,我往往会迷失其中......)

0 投票
1 回答
308 浏览

pic - PIC16:自修改代码

在微芯片 PIC16 微控制器上,我有一个程序:

在我的代码的通信模块(未显示)中,我想实现修改程序代码的可能性:更改分配给“off”和“period”的值。

注意:我不想进行变量分配(重置时会丢失),但想对存储在设备上的程序进行永久更改。

有人可以指出我正确的方向吗?理想情况下,我想在 C 中实现它。最简单的方法是什么?“off”和“period”应该是变量、指针还是常量以便于实现?

非常感谢!

0 投票
1 回答
435 浏览

linux - Gdb 在自修改代码中切换断点

我有一个程序在运行时会修改自己的代码。当我试图在代码中设置断点时,它永远不会中断,因为代码的修改会以某种方式删除断点。

我听说过硬件断点,但它是用 gdb 编写的,我的硬件不支持它们。有没有其他方法可以打破自我修改代码?

0 投票
1 回答
364 浏览

assembly - 在 x86 汇编器中找到一个用于教育目的的最小自修改代码示例?

我正在寻找几行长的示例,演示 x86 汇编程序中的自修改代码,用于教育目的(不需要做一些有意义的事情,但需要清楚地编写自己的代码,然后在阅读代码本身时执行它)。

我确实浏览了一点网络,但所有的例子要么太复杂,要么就是不言自明。我可能错过了正确的去处,所以请随意建议链接或代码。

0 投票
1 回答
173 浏览

optimization - 是否有用于生成自修改代码的简单处理器上的高级语言的现代编译器?

在缓存和分支预测之前的日子里,如果不鼓励为某些类型的优化制作自修改代码,那是相对普遍的。在 8 位到早期 32 位(例如 Amiga)的时代,它可能最常见于用汇编程序编写的游戏和演示中。

我不确定当时是否有任何编译器发出自修改汇编程序或机器代码。

我想知道是否有任何当前/现代编译器可以做到。显然,在具有高速缓存的强大处理器上,这将是无用的或太难了。

但是对于嵌入式系统中使用的非常多的简单处理器呢?对于任何简单/8位/嵌入式处理器,任何现代编译器都认为自我修改代码是一种可行的优化策略吗?


有一个类似标题的问题,“周围有任何自我改进的编译器吗? ”,但请注意,它不是同一个主题:

请注意,我说的是一个自我改进的编译器——而不是一个改进它编译的代码的编译器。

0 投票
2 回答
130 浏览

python - 有没有办法在 Python 中函数的每一行上装饰/执行操作?

假设我有一个函数或方法在执行它所做的每个操作之前执行重复的操作,例如检查值,如下所示:

这些检查会重复进行,最终会浪费大量时间和键盘弹簧,尤其是在经常需要它们的时候。

如果您可以控制操作功能,例如,do_operation_N您可以使用检查布尔值的东西来装饰功能。

但是,如果您无法控制各个do_operation_N操作怎么办?如果,对于函数或方法中的每一行,我希望执行相同的检查,是否有某种方法可以“插入”它而不在每个操作行上明确写入?例如,是否有一些装饰魔法可以让我执行以下操作?

如果有办法实现这一点,我不在乎它是否使用装饰器;我只想用某种方式说“对于函数/方法 X 中的每一行,先做 Y”。

上面一个方法的“神奇”示例do_call是我所追求的简写,但它会遇到个别行的乱序执行的严重问题(例如,如果函数的第一行是变量赋值,它的其次是使用该变量,无序执行它们会导致问题)。

需要明确的是:外部控制函数执行的逐行顺序的能力不是我想要实现的:理想情况下,我只是实现一些以自然执行顺序执行操作的东西每次myfunc都做某事。如果“做某事”最终仅限于“调用函数或方法”(不包括赋值、if检查等),那很好。

0 投票
4 回答
1513 浏览

c++ - 如何使 #include 文件的内容成为 cpp 文件中的编译时常量?

我有一个文件module.hpp

和一个main.cpp程序

我可以放什么...?...让头文件的内容在这里打印?

一个基本的想法是

但是多行字符串仅在 C++11 中可用,并且在多行字符串中不起作用(这很好#include

如果 gcc 有一种不可移植的方式……那将是一个开始。

澄清(更新):替换应该在编译时完成。

0 投票
1 回答
78 浏览

expert-system - 专家系统中的自修改规则

有什么方法可以让系统本身修改专家系统上的规则,以便它可以从经验中学习?- 建议总是受欢迎的。谢谢!

0 投票
1 回答
1027 浏览

assembly - self-modifying code algorithm

some programs generates the executable code at run-time. i.e computer virus, packed binary. this makes static analysis very difficult.

aside from packing algorithms, is there any general algorithm for self-modifying code generation? or compiler support? where can I get related documentation or paper? and what is the difference between self-modifying code and polymorphic code?

I am curious.

thank you in advance.

0 投票
2 回答
654 浏览

ruby - Ruby 中的自修改代码

我担心在 Ruby 中编写自修改代码。通过自我修改,我的意思是能够编写将代码块作为输入值的函数,并基于此输出另一个代码块。(我不是在询问诸如在运行时重新定义方法之类的基础知识。)

我可能想要做的是,例如,有以下块,

可以注意到参数a并且d根本没有在正文中使用,所以我想要一个函数,例如。#strip删除它们,

这应该产生与写作相同的结果:

现在在 Lisp 中,这很容易,因为 Lisp 代码是很容易操作的数据。但我不知道如何操作 Ruby 代码。我可以解析它,例如。经过

但是,基于此,我如何编写修改后的块?我想做的其他例子是例如。

到目前为止,在 Ruby 中,我从未遇到过不得不承认某事是不可能的情况。但这一次,直觉告诉我,我可能遇到了结构优美的代码与几乎没有语法可言的代码(这将是 Lisp)的根本弱点。请赐教。