Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   [ASSEMBLER] Задаем вопросы (для новичков) (https://forum.antichat.xyz/showthread.php?t=70421)

!_filin_! 25.05.2007 17:31

[ASSEMBLER] Задаем вопросы (для новичков)
 
надо в меседжбоксе вывести содержание переменной, как реализовать?

Great: В этой теме задаем простые вопросы по ассемблеру (специально для новичков)

А®ТеS 25.05.2007 17:52

Элементарно:
Код:

...
.data
msgtext db "Hello, WORLD", 0h
msgcap db "It is ASM!!! =)", 0h
...
.code
start:
INVOKE MessageBoxA, 0 offset msgtext, offset msgcap, 0
end start


!_filin_! 25.05.2007 18:00

гг..ты немного...а точнее совсем нетак понял. Значение в переменную заносится во время работы проги, например я от функции получаю число. и его надо вывести на месседж бокс вот примерный код:
...................
Код:

.data
msgtext db "Hello, WORLD", 0h
msgcap db "It is ASM!!! =)", 0h
messedg db ?

...............
Код:

code
start:
mov messedg, 15
INVOKE MessageBoxA, 0 offset msgtext, offset msgcap, 0
end start
Использовал вместо функции MOV, соответственно как на месседж бокс вывести содержание переменной messedg (число 15)


da_ff 25.05.2007 21:07

а сзади дописать 0h у messedg? так сказать привести строку к ASCIIZ виду

slesh 26.05.2007 12:02

Просто так вывести нельзя. так число - это не строка.
Поэтому нужно перевести из числа в строку. Можно сделать это вручную, но лучше юзать API функцию.
Вот код на FASM. Выводит содержимое регистра.
Код:

format PE GUI
entry _start
include 'd:\coding\fasm\include\win32ax.inc'
include 'd:\coding\fasm\include\encoding\win1251.inc'
include 'd:\coding\fasm\include\apia\user32.inc'
section '.data' data readable writeable
formats db "%d",0
zagolovok db "Содержимое регистра",0
temp db 256 dup(?)
section '.code' code readable executable
_start:
mov eax,-1234568
invoke wsprintf,temp,formats,eax
invoke MessageBox,0,temp,zagolovok,MB_OK
invoke ExitProcess,0
section '.idata' import data readable writeable
library kernel32,'KERNEL32.DLL',user32,'USER32.DLL'
include 'd:\coding\fasm\include\apia\kernel32.inc'


Xserg 26.05.2007 14:57

Решил тоже ассемблер поизучать.
Пишется таким способом тяжело, зато инжектится в чужой процесс элементарно.
IMНO зачем тогда ассемблер нужен.

INVOKE wvsprintf,offset outst,offset inst,var1,var2, .....
h ttp://msdn2.microsoft.com/en-us/library/ms647551.aspx
Преобразует содержание переменной(ых) в строку.

Код:

  .486               
  .model flat,stdcall
  option casemap :none

kernel32 EQU edx
user32 EQU ebx
CallFunc MACRO reg,zText:VARARG
    LOCAL m1
          call m1
          db zText,0
          m1:
      push reg
      call ebp
      call eax
            ENDM
cText MACRO zText:VARARG
      LOCAL m1
          call m1
          db zText,0
          m1:
        ENDM
;----------------------------------------------
      .code
start:
  mov edx,[esp]     
  call sfind_kern_b
; edx kernel32.dll ModuleHandle
; ebx User32.dll  ModuleHandle
; ebp = GetProcAddress(GetModuleHandle('kernel32.dll),'GetProcAddress');
  push kernel32 ;--1
cText  'user32.dll'
    CallFunc kernel32,'LoadLibraryA'
    mov user32,eax
  pop kernel32  ;--1
;--------------------------------------------------
CallFunc kernel32,'GetCurrentProcessId'
;--------------------------------------------------
; INVOKE wvsprintf,offset outst,offset inst,var1,var2, .....
; http://msdn2.microsoft.com/en-us/library/ms647551.aspx
;-------------------
    mov ecx,10
m1:  push 0
loop m1  ;10*4+
    mov ecx,esp ;offset outst
    push ebp ;--1
    push ebx ;--2
    push eax ;ProcessId var1
    push esp ;var1
cText 'It is MASM!!! =)%#8IX',0 ;//offset inst
    push ecx ;offset outst
    CallFunc user32,'wvsprintfA'
    add esp,4 ; var1 dellete
    pop ebx ;--2
    pop ebp ;--1
    mov ecx,esp ;offset outst
;---------------------------------------------------   
;-- MessageBox ----------------------------------
      push 0
cText 'ProcessId'
      push ecx ;offset outst
      push 0
      CallFunc user32,'MessageBoxA'
add esp,10*4 ;10*4-
ret                                                    ; exit proocess
;-------------------------------------------   
;-- No comments -- Не отлажено ------
sfind_kern_b: ;edx base
sfind_kern_bs:
  and edx,0ffff0000h
 cmp word ptr [edx],05A4Dh
jz sfind_kern_b1
  sub edx,1000h
  jmp sfind_kern_bs
sfind_kern_b1:
  mov eax,[edx+3ch]
  mov ebx,edx
  add ebx,eax
 cmp word ptr[ebx],04550h
jz sfind_kern_b2
  sub edx,1000h
  jmp sfind_kern_bs
GPA db 'GetProcAddress',0
sfind_kern_b2:
  mov esi,offset GPA
  mov ebx,EDX
  add ebx,03Ch
  mov eax,[ebx]
  mov ebx,EDX
  add ebx,eax
  add ebx,160h-0e8h
  mov ecx,EDX
  add ecx,[ebx]
  add ecx,12 ; adr export
  mov ebx,EDX
  add ebx,[ecx]
  mov edi,ebx
  xor eax,eax
sadrxor:
  push edi
  push esi
sgpa_fefe:
  pop edi
  pop esi
    inc esi
  push esi
  push edi
  mov ecx,0Fh
  repe cmpsb 
  cmp ecx,0
  jz sgpa_fef
  mov cl,0
  cmp [esi],cl 
  jnz sgpa_fefe
  inc eax
  jmp  sgpa_fefe
 sgpa_fef:
  pop edi
  pop esi
  push eax
  mov ebx,EDX
  add ebx,03Ch
  mov eax,[ebx]
  mov ebx,EDX
  add ebx,eax
  add ebx,160h-0e8h
  mov ecx,EDX
  add ecx,[ebx]
  pop ebx 
  dec ebx
  MOV EAX,[ECX+24h]
  add eax,edx
  MOV bx,[eax+ebx*2]
  MOV EAX,[ECX+1ch]
  add eax,edx
  MOV EAX,[eax+ebx*4]
  add eax,edx
  mov ebp,eax
ret
end start

Как бы все это попроще писать?
Особенно переменные в стеке. :confused:

tclover 26.05.2007 15:05

Мне нужна таблица системных вызовов линукс, чтобы с регистрами и все дела =\
Есть у кого?

_Great_ 26.05.2007 16:42

Тискаем гугл

второй линк: http://www.die.net/doc/linux/man/man2/syscalls.2.html
читай-не хочу

slesh 26.05.2007 17:37

2 da_ff. Типа сумничал?
Можно и сделать деление, но это только в тех случаях когда пишешь под DOS. потому что там нет API функций. Если нужно под дос, то могу выложить примерчик!

-n00by- 27.05.2007 17:43

О! крута.... ну раз такой сабж забили, то посоветуйте книги/статьи попроще, ибо я ваще в этом не шарю


Время: 22:43