khanhhoangbkdn
VIP Members
-
07/10/2016
-
34
-
65 bài viết
Tổng hợp tài liệu học assembly trên NASM
Với những người bước đầu mới tìm hiểu đến Khai thác lỗ hổng phần mềm thì định hướng đầu tiên chắc chắn là phải biết và lập trình Assembly .
Mới bắt đầu mình nghĩ là các bạn nên lập trình assembly với NASM trên i386 vậy mình chia sẻ 1 số tài liệu mình đã xem qua và bạn nào có tài liệu về lập trình assembly trên NASM chia sẻ luôn để mọi người cùng học hỏi
- Ví dụ cấu trúc chương trình của 1 bài assembly convert hệ Dec qua Bin và Hex.
Các bạn có thể trao đổi source bài tập trong box này nhé ,có gì cứ đưa lên để anh em còn giúp đỡ
Mới bắt đầu mình nghĩ là các bạn nên lập trình assembly với NASM trên i386 vậy mình chia sẻ 1 số tài liệu mình đã xem qua và bạn nào có tài liệu về lập trình assembly trên NASM chia sẻ luôn để mọi người cùng học hỏi
- Để hiểu các lệnh dùng trong Assembly bạn có search trên google hoặc đọc tài liệu của bác này "_[Kienmanowar]_" mình thấy khá đầy đủ (tài liệu về RE nhưng có giới thiệu về các lệnh trong Assembly đọc từ phần 2 đến 6 rảnh thì có thể dọc hết ).
- Tài liệu về lập trình assembly trên NASM
- Các tools biên dich và file thư viện để biên dịch các hàm
- Ví dụ cấu trúc chương trình của 1 bài assembly convert hệ Dec qua Bin và Hex.
Mã:
[INDENT]%include "WIN32N.INC"
extern gets
import gets msvcrt.dll
extern printf
import printf msvcrt.dll
extern scanf
import scanf msvcrt.dll
extern puts
import puts msvcrt.dll
segment .data USE32
t db "0123456789ABCDEF",0
formatin db "%d",0
n times 4 dd 0
msg1 db "Nhap vao so tu nhien N :", 0
bin db "00000000000000000000000000000000" ,0
msg2 db "convert bin is :",0
hex db "00000000",0
msg3 db "convert hex is :",0
segment .bss USE32
segment .code USE32
..start:
push dword msg1
call [printf]
add esp,4
push n
push formatin
call [scanf]
add esp,8
mov eax ,dword [n]
mov ebx ,2
mov cx ,32
mov esi, 0
lap_bin:
xor edi,edi
xor edx,edx
div ebx ;thuong luu tai eax du luu tai edx
mov dl,[t+edx]
mov edi,bin
add edi,31
sub edi,esi
mov [edi],dl
inc esi
cmp eax,0
je lap_hex
loop lap_bin
lap_hex:
mov eax ,dword [n]
mov ebx ,16
mov cx ,8
mov esi,0
lap_hex2:
xor edi,edi
xor edx,edx
div ebx
mov dl,[t+edx]
mov edi ,hex
add edi,7
sub edi,esi
mov [edi],dl
inc esi
cmp eax ,0
je printf_bin
loop lap_hex2
printf_bin:
push dword msg2
call [printf]
add esp,4
push bin
call [puts]
add esp,4
push dword msg3
call [printf]
add esp,4
push hex
call [puts]
add esp,4
jmp ..start
[/INDENT]