标签: self-modifying

mprotect是否刷新ARM Linux上的指令缓存?

我正在ARM Linux上编写一个JIT,它执行一个包含自修改代码的指令集.指令集没有任何缓存刷新指令(在这方面类似于x86).

如果我向页面写出一些代码,然后mprotect在该页面上调用,那是否足以使指令缓存无效?或者我还需要cacheflush在这些页面上使用系统调用吗?

linux jit arm mprotect self-modifying

5
推荐指数
1
解决办法
1655
查看次数

C标准是否允许自我修改代码?

在C中可以以可移植的方式实现自修改代码吗?

我问的原因是,在某种程度上,OOP依赖于自修改代码(因为在运行时执行的代码实际上是作为数据生成的,例如在v表中),但是,似乎,如果这太过分了,它会阻止编译器中的大多数优化.

例如:

void add(char *restrict p, char *restrict pAddend, int len)
{
    for (int i = 0; i < len; i++)
        p[i] += *pAddend;
}
Run Code Online (Sandbox Code Playgroud)

优化编译器可以提升*pAddend循环,因为它不会干扰p.但是,这不再是自修改代码中的有效优化.

通过这种方式,似乎C不允许自修改代码,但同时,这不意味着你不能在C中做一些像OOP这样的事情吗?C真的支持自修改代码吗?

c self-modifying

5
推荐指数
1
解决办法
1730
查看次数

我可以在Android中使用自我修改吗?

当我阅读Google Play政策时,我在这句话中有一个问题.

从Google Play下载的应用不得使用Google Play更新机制以外的任何方法修改,替换或更新自己的APK二进制代码.

这意味着开发人员不能使用自修改代码??

例如,当用户第一次运行我的应用程序时,我的应用程序会修改其二进制代码.

如果我使用它,我可以使用自修改代码上传我的应用程序吗?

android self-modifying

5
推荐指数
1
解决办法
590
查看次数

当一个线程正在编写另一个线程可能同时执行的代码时,如何在ARM上同步?

考虑一个多核ARM处理器.一个线程正在修改机器代码块,该机器代码块可能由另一个线程同时执行.修改线程执行以下类型的更改:

  1. 将机器代码块标记为跳过:它将跳转指令作为代码块的第一条指令,以便执行它的任何人都应该跳过其余的指令,跳过整个代码块.
  2. 将机器代码块标记为执行:它从第二个开始写入其余的指令,然后它原子地用代码块的预期第一条指令替换第一条指令(跳转).

对于代码编写器线程,我理解使用std::memory_order_releaseC++ 11 进行最终编写就足够了.

但是,不清楚在执行程序线程端要做什么(它失控,我们只控制我们编写的机器代码块).在修改代码块的第一条指令之前,我们应该写一些指令屏障吗?

c++ assembly multithreading arm self-modifying

5
推荐指数
1
解决办法
802
查看次数

自修改代码的用例?

Von Neumann架构上,程序和数据都存储在内存中,因此程序可以自行修改。这对程序员有用吗?你能举一些例子吗?

self-modifying von-neumann

4
推荐指数
2
解决办法
670
查看次数

C++ - 修改后修复文件权限

我将我的数据保存在程序的可执行文件中.我将它复制到一个临时文件,覆盖从"魔术字符串"开始的部分并将其重命名为原始文件.我知道这是个坏主意,但我只是为了试验而做.

到目前为止,我已经完成了所有工作,除了每次更换文件时我必须重新启用"允许作为可执行文件运行".有什么方法可以解决这个问题?

附加信息:我使用linux.

c++ linux executable file-permissions self-modifying

4
推荐指数
2
解决办法
2万
查看次数

自修改python脚本

我想创建python脚本,它可以使用Python语言服务或使用任何其他方式修改该脚本本身的代码.
例如,跟踪其成功执行计数的脚本

import re
COUNT = 0

def updateCount():
    # code to update second line e.g. COUNT = 0
    pass

if __name__ == '__main__':
    print('This script has run {} times'.format(COUNT))
    updateCount()
Run Code Online (Sandbox Code Playgroud)

成功执行此脚本后,代码应更改为

import re
COUNT = 1

def updateCount():
    # code to update second line e.g. COUNT = 0
    pass

if __name__ == '__main__':
    print('This script has run {} times'.format(COUNT))
    updateCount()
Run Code Online (Sandbox Code Playgroud)

我想到的简单方法是__file__在写入模式下打开,并使用调节器实验等进行必要的修改.但是这不起作用我得到了例外io.UnsupportedOperation: not readable.即使这种方法有效,也会有很大的风险,因为它会破坏我的整个脚本.所以我正在寻找使用Python语言服务的解决方案.

python self-modifying

4
推荐指数
3
解决办法
3813
查看次数

修改其exe内部字符串的程序

我在寻找程序的例子,它修改了它的exe内部的一个字符串.

我在Windows下使用C++,Visual Studio.

我搜索了Windows中的工作示例,但我找不到任何正常工作的代码.

我需要简单的代码,它会询问用户的字符串:

string strTest = "";
(if strTest != "")
{
   cout << "Modified: " << strTest << endl;
}
cin >> strText;
Run Code Online (Sandbox Code Playgroud)

代码应该重写:

string strTest = "";
Run Code Online (Sandbox Code Playgroud)

要键入该类型的用户:

string strTest = "SomeStringFromUser"; 
Run Code Online (Sandbox Code Playgroud)

在C++中,如何将字符串(从字符串strTest ="")修改为字符串,用户输入的是什么?(例如strTest ="foo")?

c++ self-modifying visual-studio

3
推荐指数
1
解决办法
2177
查看次数

一种实现`String#split!`的方法

有时我需要这样的方法,它可以改变自己对象的类.有String#delete!,#downcase!,#encode!,#gsub!,#strip!,#slice!,等他们都试图改变字符串,但结果类是无论如何仍String.我想要一个可以转换String为的方法Array.一些方法来做到这一点:

irb(main):082:0> str = "qwerty"
=> "qwerty"
irb(main):083:0> str.split! "e"
=> ["qw", "rty"]
irb(main):084:0> str
=> ["qw", "rty"]
Run Code Online (Sandbox Code Playgroud)

可能吗?也许一些很酷的日本功夫或丑陋的自行车 - 我想看到任何解决方案.

ruby class self-modifying

3
推荐指数
1
解决办法
361
查看次数

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

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

def myfunc():
    if mybool:
        do_operation_1()
    else:
        return

    if mybool:
        do_operation_2()
    else:
        return

    ...
Run Code Online (Sandbox Code Playgroud)

这些检查会重复,最终会浪费大量时间和键盘弹簧,特别是在经常需要时.

如果您可以控制操作函数,例如,do_operation_N您可以使用检查布尔值的函数来修饰函数.

但是,如果您无法控制各个do_operation_N操作,该怎么办?如果,对于函数或方法中的每一行,我想要执行相同的检查,是否有某种方法可以"插入"它而无需在每个操作行上明确写入它?例如,是否有一些装饰魔术我可以做以下事情?

def magic_decorator(to_decorate):
    def check(*args, **kwargs):
        for call in to_decorate: #magic
            if mybool:
                to_decorate.do_call(call) #magic
            else:
                return #or break, raise an exception, etc
    return check

@magic_decorator
def myfunc():
    do_operation_1()
    do_operation_2()
    ...
Run Code Online (Sandbox Code Playgroud)

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

do_call上面方法的"神奇"示例是我所追求的简写,但它会遇到单个行的无序执行的严重问题(例如,如果函数的第一行是变量赋值,并且第二个是使用该变量,不按顺序执行它们会导致问题).

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

python metaprogramming decorator self-modifying python-decorators

3
推荐指数
1
解决办法
117
查看次数