标签: dynamic-execution

有没有办法欺骗.net JIT编译器运行另一个方法?

好的,假设我的应用程序向内存发出(x86)指令,使页面可执行等等.有没有办法改变un-JITted方法的方法存根指向我发出的指令流?

例如:

假设我在内存中创建了一个x86指令流,它可以执行任意操作.现在,进一步假设我有一个方法'int Target()'.我还没有打电话,所以还没有编译.有没有办法:

  1. 获取指向Target的存根的指针
  2. 使它指向我发出的指令流.

我意识到.Net的几乎每一个安全功能都是为了防止像这样的劫持.但是,通过托管API可以实现吗?

.net security clr jit dynamic-execution

7
推荐指数
2
解决办法
857
查看次数

编译包含动态并行性的代码失败

我正在使用CUDA 5.5和NVDIA GeForce GTX 780进行动态并行编程,其计算能力为3.5.我在内核函数中调用内核函数,但它给了我一个错误:

错误:只能在compute_35架构或更高版本上调用__global__函数("kernel_5")调用__global__函数("kernel_6")

我究竟做错了什么?

c++ parallel-processing cuda dynamic-execution

7
推荐指数
3
解决办法
4146
查看次数

如何动态执行/评估包含ES6模块的JavaScript代码/需要一些依赖项?

我希望我的用户能够在我的JavaScript应用程序中使用JavaScript作为脚本语言.为此,我需要动态执行源代码.

动态执行JavaScript似乎有两个主要选项:

a)使用eval(...)方法(或var func = new Function(...);).

b)<script>向DOM 添加节点(例如,使用$('body').append(...)).

只要我不在import动态执行的源代码中使用任何语句,这两种方法都可以正常工作.如果我包含import语句,我会收到错误消息Unexpected identifier.

要执行的示例用户源代码:

import Atom from './src/core.atom.js':

window.createTreeModel = function(){
   var root = new Atom('root');
   root.createChildAtom('child');
   return root;
}
Run Code Online (Sandbox Code Playgroud)

示例应用程序代码,用于说明该动态代码的可能用法:

a)使用eval

var sourceCode =  editor.getText(); 
window.createTreeModel = undefined;
eval(sourceCode);
var model = window.createTreeModel();
treeView.setModel(model);
Run Code Online (Sandbox Code Playgroud)

b)使用DOM修改:

var sourceCode =  editor.getText(); 
window.createTreeModel = undefined;

var script = "<script >\n"+ 
            sourceCode + "\n" +             
            "</script>";

$('body').append(script); 

var model = window.createTreeModel(); …
Run Code Online (Sandbox Code Playgroud)

javascript eval dynamic-execution es6-modules

6
推荐指数
1
解决办法
1404
查看次数

Python:如何动态设置函数闭包环境

我想动态声明一个函数,我想包装对全局变量的任何访问,或者定义哪些变量是空闲的,并包装对自由变量的任何访问.

我正在玩这样的代码:

class D:
    def __init__(self):
        self.d = {}     
    def __getitem__(self, k):
        print "D get", k
        return self.d[k]
    def __setitem__(self, k, v):
        print "D set", k, v
        self.d[k] = v
    def __getattr__(self, k):
        print "D attr", k
        raise AttributeError

globalsDict = D()

src = "def foo(): print x"

compiled = compile(src, "<foo>", "exec")
exec compiled in {}, globalsDict

f = globalsDict["foo"]
print(f)

f()
Run Code Online (Sandbox Code Playgroud)

这会产生输出:

D set foo <function foo at 0x10f47b758>
D get foo
<function foo at 0x10f47b758> …
Run Code Online (Sandbox Code Playgroud)

python eval compilation global-variables dynamic-execution

6
推荐指数
1
解决办法
680
查看次数

乱序指令执行:提交顺序是否保留?

一方面,维基百科写了乱序执行的步骤:

  1. 取指令。
  2. 指令分派到指令队列(也称为指令缓冲区或保留站)。
  3. 指令在队列中等待,直到其输入操作数可用。然后允许该指令在较早、较旧的指令之前离开队列。
  4. 指令被发布到适当的功能单元并由该单元执行。
  5. 结果在排队。
  6. 只有在所有较旧的指令将其结果写回寄存器文件后,才会将该结果写回寄存器文件。这称为毕业或退休阶段。

类似的信息可以在《计算机组织与设计》一书中找到:

为了让程序表现得像在一个简单的有序流水线上运行,指令获取和解码单元需要按顺序发出指令,这允许跟踪依赖关系,并且提交单元需要将结果写入寄存器和程序获取顺序中的内存。这种保守的模式被称为有序提交……今天,所有动态调度的管道都使用有序提交。

因此,据我所知,即使指令以乱序方式执行,其执行结果也会保存在重新排序缓冲区中,然后以确定性顺序提交到内存/寄存器。

另一方面,有一个众所周知的事实,即现代 CPU 可以为性能加速目的重新排序内存操作(例如,可以重新排序两个相邻的独立加载指令)。维基百科在这里写到。

您能否解释一下这种差异?

cpu cpu-architecture dynamic-execution instructions pipelining

6
推荐指数
1
解决办法
2650
查看次数

如何在内存中运行一些代码?

我有一个编译器,它将汇编语言编译为机器语言(在内存中).我的项目是在C#.net中.有没有办法在线程上运行内存?DEP如何防止它?

byte[] a:  
01010101 10111010 00111010 10101011 ...
Run Code Online (Sandbox Code Playgroud)

.net c# jit unmanaged dynamic-execution

2
推荐指数
1
解决办法
629
查看次数