Ai có tài liệu về lập trình(Game, Đặc biệt là bảo mật) cho e xin vs ạ với lại để học tốt nhất mấy cái trên nên học ngôn ngữ nào ạ
Học bảo mật nên học ngôn ngữ nào?
Game và bảo mật thì liên quan gì đến nhau ? Hack game tất nhiên là khác hoàn toàn so với hack tài khoản ngân hàng, facebook,…
Đối với ngành bảo mật thì học càng nhiều ngôn ngữ lập trình càng tốt, mà học mỗi lập trình thôi chưa đủ, muốn theo ngành bảo mật cũng phải học nhiều thứ khác. Về khoản ngôn ngữ lập trình thì nên ưu tiên học C, C++, Python và hợp ngữ (hơi khó) trước.
Ngoài ra cũng có anh Fabian Faessler, một chuyên gia nghiên cứu bảo mật nổi tiếng, anh này có một kênh Youtube nửa triệu người đăng kí chuyên đăng về những thứ liên quan đến bảo mật tên LiveOverflow. Link:
thật ra thích cả 2 nên học thôi
Để minh họa cho độ khó của hợp ngữ thì bần tăng xin tặng thí chủ đoạn code sau:
global _start
section .data
msg db "Hello, world!", 0x0a
len equ $ - msg
section .text
_start:
mov eax, 4
mov ebx, 1
mov ecx, msg
mov edx, len
int 0x80
mov eax, 1
mov ebx, 0
int 0x80
ông ơi, tui nói thật ông đọc cái bài kia r đúng ko, tui có đăng bài xin lỗi r, ko cần phải quá nghiêm túc vs một thằng trẻ trâu như tui nếu ông cảm thấy thế. chứ đây cx bt trình độ mình thì chỉ dừng lại ở Pascal lớp 8 thôi. Tuổi trẻ chưa trải sự đời.
Mình xin được phân tích code của @HR16 như sau:
-
global _start
: Khai báo 1 hàm toàn cục (global) có tên là_start
, hàm này giống như hàmmain()
trong C/C++. -
section .data
: Section này là nơi để bạn define các biến. Bạn có thể thay thế phầnsection
sangsegment
và nó sẽ làm công việc y changsection
vậy(chả bt vì sao mấy ông tạo ra Asm lại thêm cái này làm gì) -
msg db "Hello, world!", 0x0a
: Khai báo biếnmsg
chứa string có nội dung là"Hello, world!"
, còn phần0x0a
thì hình như có liên quan đến số Hex thì phải. -
len equ $ - msg
: Khai báo biếnlen
chứa chiều dài của string trong biếnmsg
,equ
là=
, còn$
thì mình không biết nó là gì nữa. -
section .text
: Tương tự như phần code thứ 2, nhưng khác hơn 1 chút là Section này là nơi để bạn viết code để chạy. -
_start:
: Cái này dùng để đặt các câu lệnh bên trong hàm_start
, bạn cũng làm điều này tương tự khi bạn muốn đặt các câu lệnh vào trong 1 hàm nào đó.
VD:
; Hàm _start chạy chính
_start:
jmp func ; Gọi hàm "func"
func:
; Code của hàm ở đây
- 4 đoạn code đầu này trong hàm
_start
là dùng để in ra biếnmsg
, tức là in ra dòng chữ"Hello, world!"
trên Console:
mov eax, 4
mov ebx, 1
mov ecx, msg
mov edx, len
- Dòng code sau phần
int 0x80
đầu tiên là dùng để shutdown chương trình sau khi nó chạy xong 4 code trước đó:
mov eax, 1
mov ebx, 0
-
int 0x80
: Cái này theo mình tìm hiểu là dùng để gọi Kernel(hạt nhân của HĐH) ra xử lý các code mà chúng ta viết ra trước khi ta viết câu lệnh này. Cứ sau mỗi lần gọi Kernel xong thì đoạn code mà ta viết sau đó nếu muốn được xử lý thì phải gọi Kernel thêm lần nữa.
Mình đã cố gắng giải thích các code của bạn này theo cách của mình, tuy nhiên do đã không học và áp dụng Asm trong 1 thời gian kể từ ki mình bắt đầu học nó để build 1 OS nên cách giải của mình có thể không thực sự đúng và cụ thể cho lắm, mình vẫn khuyến khích ai muốn học Asm thì có thể lên các trang web hướng dẫn code Asm bằng từ search: Assembly tutorial
hay Asm tutorial
nếu bạn hiểu Tiếng Anh.
Mình nghĩ bạn cứ học lập trình đã, rồi sau một thời gian đủ để tự tạo ra phần mềm có ích thì đánh giá lại bản thân xem liệu mình có phù hợp với game hay bảo mật không, lúc đó hãy chọn hướng.
thanks