Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|
[ASSEMBLER] Задаем вопросы (для новичков) |

25.05.2007, 17:31
|
|
Участник форума
Регистрация: 07.01.2007
Сообщений: 103
Провел на форуме: 726068
Репутация:
122
|
|
[ASSEMBLER] Задаем вопросы (для новичков)
надо в меседжбоксе вывести содержание переменной, как реализовать?
Great: В этой теме задаем простые вопросы по ассемблеру (специально для новичков)
Последний раз редактировалось _Great_; 26.05.2007 в 14:12..
|
|
|

25.05.2007, 17:52
|
|
Участник форума
Регистрация: 25.11.2006
Сообщений: 291
Провел на форуме: 1537850
Репутация:
536
|
|
Элементарно:
Код:
...
.data
msgtext db "Hello, WORLD", 0h
msgcap db "It is ASM!!! =)", 0h
...
.code
start:
INVOKE MessageBoxA, 0 offset msgtext, offset msgcap, 0
end start
Последний раз редактировалось De-visible; 29.04.2008 в 01:25..
Причина: незабываем теги [code][/code]
|
|
|

25.05.2007, 18:00
|
|
Участник форума
Регистрация: 07.01.2007
Сообщений: 103
Провел на форуме: 726068
Репутация:
122
|
|
гг..ты немного...а точнее совсем нетак понял. Значение в переменную заносится во время работы проги, например я от функции получаю число. и его надо вывести на месседж бокс вот примерный код:
...................
Код:
.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)
Последний раз редактировалось De-visible; 29.04.2008 в 01:26..
|
|
|

25.05.2007, 21:07
|
|
Участник форума
Регистрация: 11.07.2006
Сообщений: 125
Провел на форуме: 413927
Репутация:
71
|
|
а сзади дописать 0h у messedg? так сказать привести строку к ASCIIZ виду
Последний раз редактировалось da_ff; 25.05.2007 в 21:14..
|
|
|

26.05.2007, 12:02
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
Просто так вывести нельзя. так число - это не строка.
Поэтому нужно перевести из числа в строку. Можно сделать это вручную, но лучше юзать 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'
Последний раз редактировалось slesh; 26.05.2007 в 12:07..
|
|
|

26.05.2007, 14:57
|
|
Участник форума
Регистрация: 09.12.2006
Сообщений: 135
Провел на форуме: 426226
Репутация:
726
|
|
Решил тоже ассемблер поизучать.
Пишется таким способом тяжело, зато инжектится в чужой процесс элементарно.
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
Как бы все это попроще писать?
Особенно переменные в стеке. 
|
|
|

26.05.2007, 15:05
|
|
Banned
Регистрация: 13.12.2005
Сообщений: 1,091
Провел на форуме: 9751364
Репутация:
1847
|
|
Мне нужна таблица системных вызовов линукс, чтобы с регистрами и все дела =\
Есть у кого?
|
|
|

26.05.2007, 16:42
|
|
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме: 5339610
Репутация:
4360
|
|
Тискаем гугл
второй линк: http://www.die.net/doc/linux/man/man2/syscalls.2.html
читай-не хочу
|
|
|

26.05.2007, 17:37
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
2 da_ff. Типа сумничал?
Можно и сделать деление, но это только в тех случаях когда пишешь под DOS. потому что там нет API функций. Если нужно под дос, то могу выложить примерчик!
|
|
|

27.05.2007, 17:43
|
|
Познающий
Регистрация: 10.03.2007
Сообщений: 49
Провел на форуме: 232747
Репутация:
45
|
|
О! крута.... ну раз такой сабж забили, то посоветуйте книги/статьи попроще, ибо я ваще в этом не шарю
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|