self-modifying相关内容
我不知道有任何自我改进的编译器,但我又不是一个编译器专家. 是否有任何自我改进的编译器? 请注意,我说的是自我改进的编译器,而不是改进它所编译的代码的编译器. 任何指针表示赞赏! 旁注:如果您想知道我为什么要问,请查看 这篇文章.即使我同意大多数论点,我也不太确定以下几点: 我们有可以改进的计划他们的代码现在没有人工输入——它们被称为编译器. ...所以我的问题
..
我正在修改在 dll 中编译的可执行代码的某些部分.但是我正在修改的整个段的固定地址上的单个字节无法更改,甚至无法读取. 代码很简单: SEGMENT_DATA segInfo = getSegmentInfo(mHandle, segmentName);如果 (segInfo.inFileSegmentAddr == 0) 返回 false;DWORD mOl保护;DWORD mOlPr
..
我找到了一篇关于自我修改代码的文章并尝试做一些示例,但我总是遇到分段错误.据我所知,内存权限存在违规行为.代码段是(r)ead/e(x)ecute,因此尝试将结果写入此故障.有没有办法通过在运行时或之前更改内存权限来测试程序?我使用的是 linux,示例是用 GAS 程序集编写的. .extern memcpy.section .data细绳:.asciz“随便"字符串结束:.section .
..
我正在考虑为我最近一直在研究的业余虚拟机编写 JIT 编译器.我知道一点汇编,(我主要是一个 C 程序员.我可以阅读大多数汇编并参考我不理解的操作码,并编写一些简单的程序.)但是我很难理解这几个例子我在网上找到的自修改代码. 这是一个这样的例子:http://asm.sourceforge.net/articles/smc.html 所提供的示例程序在运行时进行了大约四种不同的修改,其
..
我被告知并阅读了英特尔的手册,可以将指令写入内存,但指令预取队列已经获取过时的指令并将执行那些旧指令.我没有成功地观察到这种行为.我的方法如下. 英特尔软件开发手册第 11.6 节指出 写入当前缓存在处理器中的代码段中的内存位置会导致相关的缓存线(或多条线)无效.该检查基于指令的物理地址.此外,P6 系列和奔腾处理器会检查对代码段的写入是否会修改已预取以供执行的指令.如果写入影响预取指
..
我不知道有任何自我改进的编译器,但话说回来,我不是一个编译器人. 是否有任何自我改进的编译器? 请注意,我说的是一个自我改进的编译器 - 而不是一个改进它编译的代码的编译器. 感谢任何指点! 旁注:如果您想知道我为什么要问,请查看 这篇文章.即使我同意大多数论点,我也不太确定以下几点: 我们有可以改进的计划他们的代码现在无需人工输入——它们被称为编译器. ...
..
我正在尝试加速可变位宽整数压缩方案,并且我对即时生成和执行汇编代码很感兴趣.目前很多时间都花在了错误预测的间接分支上,根据所发现的一系列位宽生成代码似乎是避免这种惩罚的唯一方法. 一般技术称为“子程序线程";(或“调用线程",尽管这也有其他定义).目标是利用处理器高效的调用/返回预测以避免停顿.该方法在这里得到了很好的描述:http://webdocs.cs.ualberta.ca/~ama
..
我正在 ARM Linux 上编写一个 JIT,它执行一个包含自修改代码的指令集.指令集没有任何缓存刷新指令(在这方面类似于 x86). 如果我向一个页面写出一些代码,然后在该页面上调用 mprotect,这是否足以使指令缓存无效?还是我还需要在这些页面上使用 cacheflush 系统调用? 解决方案 您希望 mmap/mprotect 系统调用会建立立即更新的映射,并且无需进一步
..
很多相关问题 提到 x86 应该在自修改代码中正确处理 i-cache 同步.我编写了以下代码段,它在与执行交错的不同线程之间切换打开和关闭函数调用.我使用比较和交换操作作为额外的保护,以便修改是原子的.但是我遇到间歇性崩溃(SIGSEGV、SIGILL)并且分析核心转储让我怀疑处理器是否正在尝试执行部分更新的指令.下面给出代码和分析.可能是我在这里遗漏了一些东西
..
我正在阅读英特尔架构文档,第 3 卷,第 8.1.3 节; 自修改代码的执行性能低于非自修改代码或普通代码.性能下降的程度取决于修改的频率和代码的具体特性. 所以,如果我遵守规则: (* 选项 1 *)将修改后的代码(作为数据)存储到代码段中;跳转到新代码或中间位置;执行新代码; (* 选项 2 )将修改后的代码(作为数据)存储到代码段中;执行序列化指令;( 例如 CPUI
..
我正在修改在dll中编译的可执行代码的某些部分.但是我修改的整个段中固定地址的单个字节无法更改,甚至无法读取. 代码很简单: SEGMENT_DATA segInfo = getSegmentInfo(mHandle,segmentName);如果(segInfo.inFileSegmentAddr == 0)返回false;DWORD分子保护;DWORD mOlProtection_1
..
我的代码 import os.path #gets the module beginning = input("Enter the file name/path you would like to upperify: ") inFile = open(beginning, "r") contents = inFile.read() moddedContents = contents.u
..
自我修改代码有真正的用途吗? 我知道它们可以用于构建蠕虫/病毒,但是我想知道程序员是否有一定的理由必须使用自我修改的代码. 有什么想法吗?假想的情况也欢迎. 解决方案 原来,"自修改代码"列出了一个很好的列表: 与状态相关的循环的半自动优化. 运行时代码生成,或 运行时或加载时间(很流行, 例如,在 实时图形),例如通用 排序实用程序,准备执行代码 a中描述的关键比较
..
我正在尝试编写自我修改的asm代码. 有时,我尝试以下操作:(NASM编译器) start_of_code: ; ... snip ... cmp byte [rax], 0x66 jae above_label add byte[rax], 0x20 ; ... snip ... above_label: inc rax loop start_of_code gdb在开始
..
我有一个程序可以生成自我修改的代码(请参见 https://tigress.wtf/selfModify.html (如果您有兴趣).它可以在x86 Darwin和Linux上运行.在达尔文上,我用 进行编译 gcc -g -segprot __TEXT rwx rwx self_modifying.c -o self_modifying.exe 最近,这似乎不起作用,我明白了 dy
..
我最近正在考虑编写自我修改程序,我认为它可能功能强大且有趣.因此,我目前正在寻找一种可以轻松修改程序自己的代码的语言. 我了解了 C#(作为一种解决方法)以及在运行时编译和执行代码的能力,但这太令人伤心了. 我也在考虑组装.更改正在运行的代码比较容易,但是功能不是很强大(非常原始). 您能建议一种功能强大的语言或功能来支持在运行时修改代码吗? 示例 那是我在运行时修改代码的意
..
我正在尝试加快可变位宽整数压缩方案,并且对即时生成和执行汇编代码感兴趣。当前,在错误预测的间接分支上花费了大量时间,并且基于发现的一系列位宽生成代码似乎是避免这种代价的唯一方法。 一般技术称为“子例程线程”(或“调用线程”,尽管也有其他定义)。目的是利用处理器有效的呼叫/重发预测,以避免停顿。该方法在此处进行了详细说明: http:// webdocs。 cs.ualberta.ca/~a
..
我试图用MIPS编写一个程序,该程序连续提示输入两个整数并打印总和,直到总和为0.诀窍是,如果总和为13,我需要调用一个方法来更改已组装的MIPS这样的代码 add $t2, $t0, $t1 成为 and $t2, $t0, $t1 和随后的所有循环运行均使用and指令. 我有一个求和循环,因此当总和为13时,将调用要修改指令的instMod方法.不幸的是,我不知道从哪
..
我手上的时间太多了,开始怀疑我是否可以编写一个自我修改程序.为此,我用C语言编写了一个"Hello World",然后使用十六进制编辑器在已编译的可执行文件中查找"Hello World"字符串的位置.是否可以修改该程序以打开自身并覆盖"Hello World"字符串? char* str = "Hello World\n"; int main(int argc, char* argv)
..
这是我的的后续操作上一个问题.我不认为Lisp代码与Von Neumann架构上的机器代码具有同质性.在我看来,在两种情况下,代码都表示为数据,但显然,与Lisp相比,您可以在机器代码中更自由地利用此属性. 当随意修改机器代码时,自我修改代码是如此容易,它总是在无时无刻不在发生,而且(以我的经验)常常会产生搞笑的结果.在编写一个简单的“打印数字0-15"程序时,我的一个指针可能会出现"off
..