Ir para conteúdo
Fórum Script Brasil
  • 0

Manipular Memoria Dinamica E Editar A Memoria


Cyberhack

Pergunta

Amigos venho ao forum para ter mais conhecimento sobre delphi, então me caiu uma dificuldade,

como e feita a manipulaçao em memoria dinamica e como editar ela..

procurei so mas são coisas vagas.

alguém pode me auxiliar?

Obrigado

Editado por Micheus
Não observação do item 3.7 das regras do forum - NÃO digite em caixa alta (1º aviso)
Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

No help do delphi temos:

Memory allocation sizes

Type Parameter

Syntax {$M minstacksize,maxstacksize}

{$MINSTACKSIZE number}

{$MAXSTACKSIZE number}

Default {$M 16384,1048576}

Scope Global

Remarks

The $M directive specifies an application's stack allocation parameters. minstacksize must be an integer number between 1024 and 2147483647 that specifies the minimum size of an application's stack, and maxstacksize must be an integer number between minstacksize and 2147483647 that specifies the maximum size of an application's stack.

If there is not enough memory available to satisfy an application's minimum stack requirement, Windows will report an error upon attempting to start the application.

An application's stack is never allowed to grow larger than the maximum stack size. Any attempt to grow the stack beyond the maximum stack size causes an EStackOverflow exception to be raised.

The $MINSTACKSIZE and $MAXSTACKSIZE directives allow the minimum and maximum stack sizes to be specified separately.

The memory allocation directives are meaningful only in a program. They should not be used in a library or a unit.

traduzindo

A diretiva $M especifica os parâmetros de distribuição de pilha de uma aplicação. minstacksize deve ser um número de inteiro entre 1024 e 2147483647 isso especifica o tamanho mínimo da pilha de uma aplicação, e maxstacksize deve ser um número de inteiro entre minstacksize e 2147483647 isso especifica o tamanho de máximo da pilha de uma aplicação.

Se não houver bastante memória disponível satisfazer a exigência de pilha de mínimo de uma aplicação, o Windows informará um erro ao tentar começar a aplicação.

A pilha de uma aplicação nunca é permitida crescer maior que o tamanho de pilha máximo. Qualquer tentativa para aumentar a pilha além do tamanho máximo da pilha causará uma exceção de EStackOverflow.

O $MINSTACKSIZE e directives de $MAXSTACKSIZE permitem especificar o mínimo e máximo separadamente.

O directives de distribuição de memória só são significantes em um programa. Eles não deveriam ser usados em uma biblioteca ou uma unit.

Memoria dinamica usando C++

http://www.linhadecodigo.com.br/Artigo.aspx?id=1198

Mais sobre criação de formularios dinamicamente ( uso de memoria )

http://www.ramosdainformatica.com.br/art_r...s01.php?CDA=584

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
obrigado pela ajuda amigos, quanto ajuda melhor para discutir o tópico,

valeu pelas dicas, e quem puder ajudar mais eu agradeço

Cyberhack, acredito que seria mais proveitoso se você desse uma idéia do que você tem em mente.

Observe que cada colega, acima, deu uma resposta referente ao seu post inicial. Porém, são aspectos diferentes da questão "manipulação em memória dinâmica".

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Opa

Seguinte, olha agora vendo bem o que o Jonas postou eu acho que não entendi nada rs

Você quer tipo manipular a memória do seu ou outro programa?

é o que eu entendi, mas pelo visto entendi errado rs

O que exatamente você quer fazer?

porque meus códigos que eu falei, é pra editar a memória do seu programa ou de outro

em tempo de execução, porém não é tão simples assim, precisa manjar outras coisas

abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Opa

Então, ai vai algumas funções de leitura e escrita de memória...

var
hWND: Cardinal;

hWND := Handle da janela que voce quer acessar a memoria...

//Faz a leitura de um determinado endereço como Integer
function ReadMemInteger(Address: Cardinal): Cardinal;
var
ProcId: Cardinal;
tProc: THandle;
NBR: Cardinal;
value:integer;
begin
    GetWindowThreadProcessId(hWND, @ProcId);
    tProc := OpenProcess(PROCESS_ALL_ACCESS, False, ProcId);
    ReadProcessMemory(tProc, Ptr(Address), @value, 4, NBR);
    CloseHandle(tProc);
    Result:=value;
end;

//Faz a leitura de um determinado endereço como Byte
function ReadMemByte(Address: Cardinal): Cardinal;
var
ProcId: Cardinal;
tProc: THandle;
NBR: Cardinal;
value:byte;
begin
    GetWindowThreadProcessId(hWND, @ProcId);
    tProc:= OpenProcess(PROCESS_ALL_ACCESS, False, ProcId);
    ReadProcessMemory(tProc, Ptr(Address), @value, 1, NBR);
    CloseHandle(tProc);
    Result:=value;
end;

//Faz a leitura de um determinado endereço como String
function ReadMemString(addr, len : dword): string;
var
 str : string;
 dwread : dword;
 IDProc: Integer;
 hHandle: hWnd;
begin
  GetWindowThreadProcessId(hWND, @IdProc);
  hHandle := OpenProcess(PROCESS_VM_READ, False, IdProc);
  setlength(str, len);
  readprocessmemory(hHandle, pointer(addr), @str[1], len, dwread);
  result := str;
end;

//Faz a escrita de um determinado endereço como Integer
procedure MWint(Address: Integer; buf: Integer; Length: DWORD);
var ProcID, THandle: Integer;
    e: DWORD;
begin
   GetWindowThreadProcessId(hWND, @ProcID);
   THandle := OpenProcess(PROCESS_ALL_ACCESS, False, ProcID);
   WriteProcessMemory(THandle, Ptr(Address), @buf, Length, e);
   CloseHandle(THandle);
end;

//Faz a escrita de um determinado endereço como String
procedure MWStr(Address: Integer; buf: String; Length: DWORD);
var ProcID: Integer;
    THandle: hWnd;
    e: DWORD;
begin
  GetWindowThreadProcessId(hWND, @ProcID);
  THandle := OpenProcess(PROCESS_ALL_ACCESS, False, ProcID);
  WriteProcessMemory(THandle, Pointer(Address), PChar(buf), Length, e);
  CloseHandle(THandle);
end;

abraços

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...