是否可以在gnu prolog中获取这些内存地址?

时间:2014-04-13 01:17:56

标签: prolog gnu-prolog

基本上我正在尝试使用gnu-prolog来模拟C指针解除引用。

以下是代码:

的Prolog

:-foreign(fun(+integer,-integer)).

% p = &b;
testfun(Var, Val) :- fun(Val, Var).

main :-
A is 1,
testfun(A, P),
write(P),

C:

#include <gprolog.h>
#include <string.h>

PlBool fun(int ptr, int* res){
    *res = &ptr;                  // this is wrong
    if(res==NULL){
      return PL_FALSE;
    }else{
      return PL_TRUE;
    }
}

所以基本上它是错误的,因为ptr只是堆栈上的临时变量,并且在调用fun之后它的内存将被释放。

所以我的问题是,是否有可能在gnu prolog中获取变量的内存地址(例如,在这种情况下,它是A的地址,而不是ptr的地址)?

1 个答案:

答案 0 :(得分:1)

Gnu Prolog很容易通过writing C routines and linking扩展到可执行文件中。但如果你试图“模拟内存引用关系”,那么我怀疑黑客入侵实际的内存地址函数是否有用。

相反,正如@lurker建议的那样,你可能想要“模拟”一个内存/计算机架构,然后是一些“执行”的C语言。这听起来有点雄心勃勃,但simulation of a CPU in Prolog已经被问到了,而more recently here被你问过,潜伏在“潜伏者”中。