Сохранение указателя Delphi (WinApi)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Faost, 28 Feb 2010.

  1. Faost

    Faost New Member

    Joined:
    11 Jul 2009
    Messages:
    18
    Likes Received:
    3
    Reputations:
    0
    Здравствуйте, имеется процедура, в которую один раз на вход передается указатель на структуру, который после окончания работы процедуры естественно затирается.
    Так вот, нужно его как-нибудь сохранить, чтобы уже при повторном вызове процедуры, когда ей этот указатель не передается, процедура могла достать его и работать с ним.
    Глобальные переменные прямо использовать нельзя, т.к. эта процедура внедряется в посторонний процесс; писать на диск/в реестр тоже не вариант, т.е. нужно этот указатель сохранить в памяти самого процесса. Может есть в винде какие-нибудь функции для этого? (Что-то типа своеобразного контейнера).
    Думал еще прямо ссылаться на указатель, а в момент внедрения процедуры в другой процесс "перебить" его (а верней адрес, который ему будет присваиваться) на новый адрес структуры, который я в последствии получаю. Но как его отыскать во внедренной функции, не представляю.
    Пробовал также с дельта-смещением пошаманить, но не смог совместить асм-код с делфийским.
    Код:

    type
    TMyStruct = record
    ...
    ...
    ...
    end;

    function ThisFunction(N: pointer = nil): Integer; stdcall;
    begin
    ...?
    with TMyStruct(N^) do
    ...
    end;

    //где N передается 1 раз при

    var X: TMyStruct;
    N, Proc: pointer;

    ...
    begin
    ...
    Внедряю структуру;
    N:= Указатель на внедренную X;
    Внедряю процедуру;
    Proc:= Указатель на внедренную ThisFunction;
    CreateRemoteThread(OtherProcess, nil, 0, Proc, N, 0, TID);
    end.
     
  2. Protorus

    Protorus New Member

    Joined:
    17 Jan 2010
    Messages:
    22
    Likes Received:
    0
    Reputations:
    0
    Может SetEnvironmentVariable и GetEnvironmentVariable помогут?
     
  3. flacs

    flacs Member

    Joined:
    28 Jan 2009
    Messages:
    81
    Likes Received:
    31
    Reputations:
    6
    VirtualAlloc/WriteProcessMemory. Выделяем память и записываем в процесс.