【发布时间】:2014-01-30 02:50:48
【问题描述】:
procedure DoSomething;
var
MyAnonymousProcedure : TProc;
begin
//assign an anonymous procedure to a variable.
MyAnonymousProcedure := procedure
begin
Foo;
end;
MyAnonymousProcedure(); //Call the newly assigned procedure.
// do the same thing again but with a different anonymous method.
MyAnonymousProcedure := procedure
begin
Bar;
end;
MyAnonymousProcedure();
end;
在上面的代码中有两个匿名过程。它们依次分配给相同的 TProc 变量。每个匿名过程中的代码明显不同。有没有办法找到MyAnonymousProcedure 变量引用的可执行代码?我想那将是一个内存位置。然后可以计算在该内存位置找到的可执行代码的哈希值吗?
【问题讨论】:
-
也许我已经在岩石下生活了 20 年,但是“计算哈希值”是什么意思?您的意思是您想通过某种校验和算法运行该过程的源代码吗?你能解释一下为什么吗。我当然乐于学习新事物,而且我很好奇。
-
“你的意思是你想通过某种校验和算法运行那个过程的源代码吗?”是的,没错。
-
很有趣,但是为什么? (只是好奇)
-
在这种情况下,我想将其作为编写 Debounce 函数的一部分。 stackoverflow.com/questions/21433336/… 它在复制保护例程中也可能很有用,以确保程序没有被修补。
-
您正在尝试获取匿名函数的标识符。请注意,仅对可执行代码进行散列是不够的。您还需要包括捕获的变量。例如,考虑
MakeAdderexample from the documentation。MakeAdder(1)返回的方法的代码部分显然会和MakeAdder(2)的代码相同,但是它们捕获的变量值不同,所以不应该判断它们是相同的。
标签: delphi