Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.02.2015, 12:19   #1
andrello
Новичок
Джуниор
 
Регистрация: 28.02.2015
Сообщений: 1
Восклицание Как переделать код под асм

Здравствуйте, ребята! Помогите, пожалуйста переделать функцию под ассемблер..

Код:
function Scan(base: Cardinal; size: Cardinal; sign: PByte; mask: PAnsiChar): integer;
var
  mbi: MEMORY_BASIC_INFORMATION;
  offset: Cardinal;
  buffer: PByte;
  BytesRead: Cardinal;
  i: integer;
begin
  offset := 0;
  while (offset < size) do
  begin
    VirtualQueryEx(m_hProc, Pointer(base + offset), mbi, sizeof(MEMORY_BASIC_INFORMATION));
    if (mbi.State <> MEM_FREE) then
    begin
      GetMem(buffer, mbi.RegionSize);
      ReadProcessMemory(m_hProc, mbi.BaseAddress, buffer, mbi.RegionSize, BytesRead);
      for i := 0 to mbi.RegionSize do
      begin
        if (DataCompare(PByte(Integer(buffer) + i), sign, mask)) then
        begin
          FreeMem(buffer);
          result := integer(mbi.BaseAddress) + i;
          exit;
        end;
      end;
      FreeMem(buffer);
    end;
    offset := offset + mbi.RegionSize;
  end;
  result := 0; 
end;
andrello вне форума Ответить с цитированием
Старый 28.02.2015, 13:16   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Первый вопрос, а собственно зачем?
Второй, а собственно какой асм интересует?
Третий, винапи оставляем или переписываем?

И главное, ваши наработки где?
p51x вне форума Ответить с цитированием
Старый 28.02.2015, 17:33   #3
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,639
По умолчанию

Заготовка (MASM), некомпилируемая и содержит ошибки. В ассемблере GetMem и FreeMem нет. Что это за функции?

Код:
.486                                    ; create 32 bit code
.model flat, stdcall                    ; 32 bit memory model
option casemap :none                    ; case sensitive
 
include \masm32\include\windows.inc     ; always first
include \masm32\include\gdi32.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\msvcrt.inc
include \masm32\include\shell32.inc

includelib \masm32\lib\gdi32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\msvcrt.lib
includelib \masm32\lib\shell32.lib


.data
s1 db "s1", 0
s2 db "s2", 0
s3 db "s3", 0
s4 db "s4", 0
offset1 dd 0
base dd 0
size1 dd 0
result dd 0
mbi MEMORY_BASIC_INFORMATION <>
handle dd 0
i dd 0
sign dd 0
mask1 dd 0
BytesRead dd 0

.code                       

start:

invoke RtlZeroMemory, ADDR mbi, SIZEOF mbi

mov offset1, 2
mov result, 0

cycle:

mov eax, offset1
cmp eax, size1
jnl end1

push SIZEOF mbi
lea eax, mbi
push eax
lea eax, base
add eax, offset1
push eax
push handle
call VirtualQueryEx

mov eax, mbi.State
mov ebx, 10000h
cmp eax, ebx
jne ex1


mov ebx, mbi.RegionSize
push ebx
lea eax, buffer
push eax 
call GetMem


mov edx, BytesRead
push edx
push mbi.RegionSize
lea ecx, buffer
push ecx
mov ebx, mbi.BaseAddress
push ebx
mov eax, handle
push eax
call ReadProcessMemory


mov i, 0
mov eax, i
jmp ccl2

ccl:

mov eax, i
add eax, 1
mov i, eax

ccl2:

cmp eax, mbi.RegionSize
jge ex2


mov eax, mask1
push eax
lea ecx, sign
push ecx
lea edx, buffer
add edx, i
push edx
call DataCompare
cmp eax, 1
jne ex3

lea edx, buffer
push edx
call FreeMem

mov eax, result
add eax, i
add eax, mbi.BaseAddress
jmp ext

ex3:

jmp ccl

ex2:

lea edx, buffer
push edx
call FreeMem

ex1:

mov eax, offset1
add eax, mbi.RegionSize
mov offset1, eax

jmp cycle;

end1:

mov result, 0

ext:

end start
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 28.02.2015, 23:06   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
Что это за функции?
ВинАПИ же...
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переделать код С++ под Visual Stidio (2008). FDCastro Помощь студентам 3 03.04.2013 21:51
Как переделать под динамический двумерный массив? Kroleg C++ Builder 2 20.10.2011 13:36
[LISP] Переделать код под использование цикла DO HostileZeth Помощь студентам 0 24.09.2011 20:25
асм под линукс pufystyj Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 14.02.2011 10:22
Как можно переделать под типизированный Raideres Паскаль, Turbo Pascal, PascalABC.NET 2 07.06.2010 11:55