How Dynamic Linking Works: PLT, GOT, and Why the First Call Is Indirect
A call to puts in a normal C binary is not a direct jump to libc. The machine code in the executable names a procedure-linkage-table stub. ...
A call to puts in a normal C binary is not a direct jump to libc. The machine code in the executable names a procedure-linkage-table stub. ...
A call to puts in a normal C binary is not a direct jump to libc. The machine code in the executable names a procedure-linkage-table stub. ...
A prefork server that looked cheap in RSS before the first request can double its memory after workers start handling traffic. fork did not...
An open("/var/log/app.log", O_RDONLY) does not hand the kernel a file. It hands the kernel a string. The Virtual File System (VFS...
A static file server that uses read() into a user buffer and write() onto a socket copies every byte twice through the CPU: page cache to ...
A NIC that just received a frame cannot wait for the current process to finish a syscall. The device raises a hardware interrupt. The CPU st...
A process that spends all its time in a tight userspace loop never notices SIGTERM until the kernel has a chance to put that process back on...
A process asks for a few bytes from a file. The kernel may return them without asking the storage device for anything at all—not because the...
A mutex that takes a system call on every lock and unlock would dominate a hot critical section. The uncontended case is a few atomic instru...
A process that accepts ten thousand TCP connections cannot afford to ask the kernel about each socket in turn. select(2) and poll(2) copy ...
A shared linked list in the kernel can be walked by thousands of cores at once. A writer still has to insert or delete a node. If every walk...
A CPU core runs one thread at a time. Everything else that looks concurrent is a lie the operating system maintains by switching. The policy...