Skip to main content

Posts

Viết "Hello World" bằng C, đọc và chạy Assembly x86-64 (phần 1)

Điều đầu tiên và quan trọng nhất khi đọc về C hay assembly là: không được sợ. Code có thể lạ hay dài, nhưng không hề khó, mà thường đơn giản. không yêu cầu biết C không yêu cầu biết assembly biết code đơn giản 1 ngôn ngữ bất kỳ đọc xong là biết. Bài viết liên quan hơi ngược lại với bài viết hello word bằng x86-64 assembly , viết thì khó hơn đọc, bởi viết cần nghĩ đủ thứ, lên kế hoạch viết gì tiếp, đặt tên ra sao, còn đọc thì chỉ cần đi theo. PS: nên đọc trên máy tính hay tablet để có format chuẩn. Cài đặt gcc gdb Trên Ubuntu sudo apt update && sudo apt install -y gcc gdb Viết Hello World bằng C Hơn "hello world" 1 chút, sẽ viết 1 function nhận vào 8 đầu vào và tính tổng. #include <stdio.h> int sum(int a, int b, int c, int d, int e, int f, int g, int h) { int s = a + b + c + d + e + f + g + h; return s; } int main() { puts("Hello world!"); int s = sum(1,2,3,4,5,6,7,8); return s*2; } Dòng include như import trong Pyt...

virt-manager error: Failed to start network default error: Unable to create bridge virbr0: Package not installed

$ sudo virsh net-start default error: Failed to start network default error: Unable to create bridge virbr0: Package not installed Or turn on the VM using virt-manager: Error starting domain: Requested operation is not valid: network 'default' is not active Solution Enable libvirtd to start with the system. systemctl enable libvirtd reboot HVN at http://pymi.vn and https://www.familug.org . Ủng hộ tác giả 🍺

SSD NVMe vs SATA, DisplayPort vs HDMI, USB downstream port

^---- USB Downstream | DisplayPort ----^ SSD NVMe khác gì SSD SATA Solid-state Drive (SSD) là thế hệ ổ cứng mới, không sử dụng đĩa quay như Hard Disk Drive (HDD), SSD tốc độ nhanh gấp 5 tới vài trăm lần so với HDD. SATA là gì Serial ATA (SATA) (~2004) là công nghệ sử dụng AHCI driver giao tiếp với ổ cứng HDD, công nghệ này cũng được dùng với SSD giúp cắm được vào các máy tính đời cũ, nhưng cản trở SSD bung mình bứt phá. Các ổ cứng SATA THƯỜNG có hình chữ nhật giống bao thuốc lá. NVMe là gì Non-Volatile Memory Express (NVMe) (~2011) driver được thiết kế cho SSD, kết hợp sử dụng khe cắm PCIe, cho tốc độ nhanh hơn SATA có thể lên tới 100 lần. Các ổ cứng NVMe THƯỜNG dài thon như 2 ngón tay, hay phong kẹo cao su. $ mount | grep ' on / ' /dev/nvme0n1p1 on / type ext4 (rw,relatime,errors=remount-ro) M.2 2280 vs 2.5 inch NVMe và SATA là các chuẩn giao tiếp, không phải hình dáng của ổ cứng. Hình dáng (form factor) có 2 loại phổ biến: 2.5 inch: hình dáng truyền thống củ...

CPU chạy thread hay process?

Hay những câu hỏi liên quan: Thread và process khác gì nhau? 1 process chạy multithreading trên mấy CPU? Vì sao Java, Rust không nhắc tới multiprocessing? Khi chạy CPU bound, dùng multi-process hay multi-threaded? bài này sẽ làm cho ra nhẽ. Việc khó khăn nhất khi trả lời các câu hỏi này là tìm được các tài liệu có tính "chuẩn mực"/căn cứ, không phải mấy trang tutorial, wikipedia hay hỏi đáp trên mạng. Process là gì, thread là gì Người dùng máy tính thường biết đến khái niệm process trước, nó hiển thị mặc định trên các chương trình process manager như top , hay ps , hay Monitor trên Ubuntu, hay cả Task manager trên Windows. Mỗi process được gán cho 1 số ProcessID (PID), dùng lệnh kill -9 PID để tắt chương trình bị "treo". Khi chạy 1 chương trình, hệ điều hành sẽ tạo ra 1 (hay vài) process. Cho tới khi học lập trình Python, thấy mỗi chương trình chỉ chạy code tuần tự từ trên xuống, nhận ra rằng mỗi 1 process chỉ chạy 1 "luồng" (thread), học t...

ps và top hiển thị số thread

Người dùng Linux hẳn đều biết dùng lệnh ps -ef hay top để xem các "chương trình" đang chạy. Chương trình trên Linux thường ám chỉ 1 (vài) process đang chạy, mỗi process được gắn số ProcessID (PID). Một process có thể chạy nhiều OS thread, để xem số lượng thread (NLWP) hay thread ID (LWP), thêm option -L Xem thread với ps $ ps -efL | grep python3 # Dòng này được thêm vào cho dễ hiểu UID PID PPID LWP C NLWP STIME TTY TIME CMD -------------------------------------------------------------------------------- hvn 3818 1585 3818 0 2 21:28 pts/0 00:00:00 python3 main.py hvn 3818 1585 3819 0 2 21:28 pts/0 00:00:00 python3 main.py PID là 3818, 2 thread ID lần lượt là 3818 và 3819. Code Python3 import time from threading import Thread class MyThread(Thread): def run(self): while True: time.sleep(2) print("running") t = MyThread() t.start() t.join() Xem thread vớ...

Thảm họa PyYAML

PyYAML, thư viện parse YAML phổ biến bậc nhất của Python, được dùng trong các phần mềm dùng YAML như Ansible, SaltStack, ... > YAML: YAML Ain't Markup Language™ Ví dụ Salt state: install_network_packages: pkg.installed: - pkgs: - rsync - lftp - curl Mặc định nguy hiểm YAML không phải một ngôn ngữ/format đơn giản như JSON, nó có hàng tá tính năng mà có thể bạn không biết tới. Dùng YAML giống như dùng pickle hơn là json (có thể chứa object tùy ý). def double(x): return x+x import sys yaml.dump(double, sys.stdout) # !!python/name:__main__.double '' Function mặc định (và siêu phổ biến) để đọc file YAML: yaml.load , có thể chạy code Python, và là tác giả của hàng loạt lỗ hổng bảo mật được gắn CVE: CVE-2017-18342 In PyYAML before 5.1, the yaml.load() API could execute arbitrary code if used with untrusted data. The load() function has been deprecated in version 5.1 and the 'UnsafeLoader' has been introduced for backward compati...

[Go] any chứa được int nhưng []any không chứa được []int

Theo go tour An interface type is defined as a set of method signatures. A value of interface type can hold any value that implements those methods. Một kiểu interface định nghĩa một bộ các method. Một giá trị kiểu interface có thể chứa bất kỳ giá trị nào có đủ các method trong interface. The interface type that specifies zero methods is known as the empty interface: An empty interface may hold values of any type. (Every type implements at least zero methods.) Một kiểu interface không chỉ định method nào được gọi là empty interface : interface{} Một empty interface có thể chứa giá trị của bất kỳ kiểu nào. any trong Go là gì Từ Go phiên bản 1.18 giới thiệu cách viết khác cho interface{} là: any . Photo by Andrew Wulf on Unsplash function nhận any , nhận mọi giá trị package main import "fmt" func doThing(x any) { fmt.Print(x) } func main() { n := 5 doThing(n) s := "hello" doThing(s) } function doThing nhận đầu vào kiểu a...

Popular posts from this blog

Tài liệu và hướng dẫn học Python

Để tiết kiệm thời gian, tốt nhất là đi học PyMI Updated: 130617 Sau đây là các tài liệu khuyên dùng: Vì nhiều lý do, nên học python2.7 tại thời điểm hiện tại (giờ là tháng 6/2013 - muốn biết tại sao thì tự tìm hiểu) python 3.5+ (giờ là tháng 2/2017) Chuẩn bị: 1. biết bật tắt máy 2. biết cài python 3. tập gõ 10 ngón - gõ 2 ngón hay 1 ngón cũng không sao, nhưng 10 ngón là cách dễ nhất để gõ nhanh nhất. Tài liệu - Nên dùng tài liệu tại trang chủ của Python làm chính, tham khảo thêm các tài liệu khác tại http://www.familug.org/2016/12/free-ebook.html Căn bản, mới học 1.1 Python PyMI.vn https://pymi.vn/tutorial/ 1.2. Python offical tutorial kết hợp làm bài tập trên HackerRank  (đề bài bằng tiếng Anh, nhưng Google translate 1 lúc cũng ra vì có nhiều ví dụ mẫu đi kèm). Học viên của Pymi.vn có rất nhiều học viên đã tự học với Learn Python the hard way nhưng chưa thấy ai thành công cả. Hai link dưới nên đọc sau khi đã nắm được những phần cơ bản của ngôn ngữ pytho...

The PyMiers

New FAMILUG