procedure TForm1.Button1Click(Sender: TObject);
  procedure Fun1(p:Pointer);
  begin
    //ShowMessage(string(p^));
    //假设我不知道 这里有没办法得知 p 是指向一个string
  end;
var
  s:string;
  p:Pointer;
begin
  s:='a';
  fun1(@s);
end;

解决方案 »

  1.   

    IDA面前,了无秘密,如果是黑盒测试的话,可以猜测,白盒就直接逆向好了……
      

  2.   

    如果只是元类型,可以尝试直接传一个 
     procedure Fun1(p : variant);
     begin
       varisStr 来判断
     end;
     具体你可以了解下变体类型的知识。
      

  3.   


    如果 p是一个string的指针,那么:
    pint(integer(p)-4)^=length(p^);
    p^[length(p^)] = 0;但问题是你不能对任意一个指针进行pint(integer(p)-4)^ 访问,
    有可能变成非法访问。