Tag: 自我修改

如何编写x86程序集中的自修改代码

我正在为最近正在处理的业余爱好虚拟机编写一个JIT编译器。 我知道一些程序集,(我主要是一个C程序员,我可以阅读大部分程序集,但是我不明白这些操作码的含义,然后编写一些简单的程序),但是我很难理解几个例子自我修改的代码我在网上find的。 这是一个这样的例子: http : //asm.sourceforge.net/articles/smc.html 所提供的示例程序在运行时进行了大约四种不同的修改,其中没有一个被清楚地解释。 Linux内核中断被多次使用,并没有解释或详细说明。 (作者在调用中断之前把数据移到了几个寄存器中,我假设他正在传递参数,但是这些参数根本没有解释,让读者猜测)。 我正在寻找的是自修改程序代码中最简单,最直接的例子。 有些东西我可以看一下,用来理解x86程序集中的自修改代码是如何编写的,以及它是如何工作的。 是否有任何资源可以指向我,或者您可以提供哪些可以充分certificate这一点的例子? 我正在使用NASM作为我的汇编程序。 编辑:我也在Linux上运行这个代码。

自修改代码的用途是什么?

有没有真正的自我修改代码的用途? 我知道,他们可以用来构build蠕虫/病毒,但我想知道是否有一个很好的理由,程序员可能不得不使用自我修改代码。 有任何想法吗? 假设的情况也是受欢迎的。

使用自修改代码观察x86上过时的指令获取

我已经被告知并且从英特尔的手册中读到了可以将指令写入存储器,但是指令预取队列已经提取了陈旧的指令并且将执行那些旧的指令。 我一直没有注意到这种行为。 我的方法如下。 英特尔软件开发手册从第11.6节中指出 对当前在处理器中caching的代码段中的存储单元的写入导致相关联的一个或多个caching行失效。 这个检查是基于指令的物理地址。 此外,P6系列和奔腾处理器会检查写入代码段是否可以修改已被预取执行的指令。 如果写入影响预取的指令,则预取队列失效。 后面的检查是基于指令的线性地址。 所以,看起来如果我希望执行陈旧的指令,我需要有两个不同的线性地址引用同一个物理页面。 所以,我把内存映射到两个不同的地址。 int fd = open("code_area", O_RDWR | O_CREAT, S_IRWXU | S_IRWXG | S_IRWXO); assert(fd>=0); write(fd, zeros, 0x1000); uint8_t *a1 = mmap(NULL, 0x1000, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_FILE | MAP_SHARED, fd, 0); uint8_t *a2 = mmap(NULL, 0x1000, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_FILE | MAP_SHARED, […]

编辑,保存,自修改HTML文档; 格式生成的HTML,JavaScript

动机: https : //stackoverflow.com/questions/28120689/create-self-modifying-html-page-on-box 错误:string转义,格式化的html , js生成的初始编辑,保存html , js 例如, a)如果在本地浏览器打开“saveFile.html” b)在textareainput“abc” c)点击save filebutton; d)点击Save File对话框; e) file-*[date according to universal time].html保存到磁盘; f)在浏览器中打开file-*[date according to universal time].html ; g)在textareainput“def” h)重复d),e),f); i)错误:导致在第二个file-*[date according to universal time].html显示包含“abc def”文本内容的textarea ; button 不显示在html : // at rendered `html` from second `file-*[date according to universal time].html` // `textarea` containing "abc […]