好的,假设我的应用程序向内存发出(x86)指令,使页面可执行等等.有没有办法改变un-JITted方法的方法存根指向我发出的指令流?
例如:
假设我在内存中创建了一个x86指令流,它可以执行任意操作.现在,进一步假设我有一个方法'int Target()'.我还没有打电话,所以还没有编译.有没有办法:
我意识到.Net的几乎每一个安全功能都是为了防止像这样的劫持.但是,通过托管API可以实现吗?
我正在使用CUDA 5.5和NVDIA GeForce GTX 780进行动态并行编程,其计算能力为3.5.我在内核函数中调用内核函数,但它给了我一个错误:
错误:只能在compute_35架构或更高版本上调用__global__函数("kernel_5")调用__global__函数("kernel_6")
我究竟做错了什么?
我希望我的用户能够在我的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) 我想动态声明一个函数,我想包装对全局变量的任何访问,或者定义哪些变量是空闲的,并包装对自由变量的任何访问.
我正在玩这样的代码:
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) 一方面,维基百科写了乱序执行的步骤:
- 取指令。
- 指令分派到指令队列(也称为指令缓冲区或保留站)。
- 指令在队列中等待,直到其输入操作数可用。然后允许该指令在较早、较旧的指令之前离开队列。
- 指令被发布到适当的功能单元并由该单元执行。
- 结果在排队。
- 只有在所有较旧的指令将其结果写回寄存器文件后,才会将该结果写回寄存器文件。这称为毕业或退休阶段。
类似的信息可以在《计算机组织与设计》一书中找到:
为了让程序表现得像在一个简单的有序流水线上运行,指令获取和解码单元需要按顺序发出指令,这允许跟踪依赖关系,并且提交单元需要将结果写入寄存器和程序获取顺序中的内存。这种保守的模式被称为有序提交……今天,所有动态调度的管道都使用有序提交。
因此,据我所知,即使指令以乱序方式执行,其执行结果也会保存在重新排序缓冲区中,然后以确定性顺序提交到内存/寄存器。
另一方面,有一个众所周知的事实,即现代 CPU 可以为性能加速目的重新排序内存操作(例如,可以重新排序两个相邻的独立加载指令)。维基百科在这里写到。
您能否解释一下这种差异?
cpu cpu-architecture dynamic-execution instructions pipelining
我有一个编译器,它将汇编语言编译为机器语言(在内存中).我的项目是在C#.net中.有没有办法在线程上运行内存?DEP如何防止它?
byte[] a:
01010101 10111010 00111010 10101011 ...
Run Code Online (Sandbox Code Playgroud) .net ×2
eval ×2
jit ×2
c# ×1
c++ ×1
clr ×1
compilation ×1
cpu ×1
cuda ×1
es6-modules ×1
instructions ×1
javascript ×1
pipelining ×1
python ×1
security ×1
unmanaged ×1