Video yükleniyor...

Video Yüklenemedi

Ana Sayfaya Dön

What actually happens when a program calls write(). A program can't put bytes on the screen by itself. Only the kernel can drive hardware, and the only way in is a system call. On x86-64, that is one instruction, syscall, this video follows a single write, from the program's...

19,187 görüntüleme • 5 gün önce •via X (Twitter)

9 Yorum

John profil fotoğrafı
John5 gün önce

Actually, when a program calls write(), a request goes into Claude, which then handles the write. It’s been that way since the 80’s. Or, that’s how the newer generations will think!

Miguel A. Rodríguez-Jódar / mcleod_ideafix profil fotoğrafı
Miguel A. Rodríguez-Jódar / mcleod_ideafix5 gün önce

"A program can't put bytes on the screen by itself" (I proceed to perform a POKE 16384,255 to put a byte on the screen in a ZX Spectrum) Or ld a,255 / ld (16384),a , in case you reply to me that "that's the interpreter doing the POKE, not your program directly".

why profil fotoğrafı
why5 gün önce

Tracing a single write() is a great way to make the userspace-kernel boundary tangible. Tiny API surface, surprisingly deep path.

Pudelko profil fotoğrafı
Pudelko5 gün önce

Your posts are pure gold - thank you!

The Retarded Elon profil fotoğrafı
The Retarded Elon4 gün önce

this is nice!

Anton profil fotoğrafı
Anton5 gün önce

Love the tutorials like this.

Kisalay profil fotoğrafı
Kisalay5 gün önce

Wow it is awesome video brother 👏

2030 is wild👀 profil fotoğrafı
2030 is wild👀5 gün önce

Awesome. Love it

Gipp 🦅 profil fotoğrafı
Gipp 🦅5 gün önce

those rcx and r11 saves make debugging actual syscall returns so much easier in gdb sessions

Benzer Videolar

BROP is such a clean ASLR bypass. After brute-forcing the stack canary, the attacker starts overwriting the return address with guesses. Most guessed addresses jump into garbage or non-executable memory. The child process segfaults, and the socket closes. But occasionally, a guessed return address lands in real code that does something like sleep, pause, or an infinite loop. The process hangs, so the socket stays open. That address becomes a stop gadget. A known "safe landing pad" in the ROP chain. It gives the attacker a reusable signal. From there, they probe for stack-pop gadgets. probe_addr > trap_addr > stop_addr If probe_addr is not a pop reg; ret, execution returns into the trap address and crashes. If probe_addr is a pop reg; ret, it consumes the trap value from the stack and returns into the stop gadget instead. The socket stays open. So the attacker can remotely classify gadgets without seeing the binary. On x86-64, syscall/function args are in registers, not on the stack. So it’s not enough to know "this gadget pops one value." You need to know which register it controls. BROP uses signal syscalls like pause to map the gadgets. find pop rax; ret find pop rdi; ret find pop rsi; ret find pop rdx; ret find syscall Once those gadgets are identified, the attacker can directly assemble a write(2) syscall: rax = SYS_write rdi = socket fd rsi = pointer into .text rdx = length then return into syscall to execute it Once write(2) is reachable, BROP turns the live process into its own ASLR leak, and the server sends its text segment back over the socket. From that dump, the attacker recovers gadgets and offsets offline, then builds the final ROP chain for the same randomized layout the forked server keeps reusing. MIT 6.858.

tetsuo

25,142 görüntüleme • 3 ay önce

SVM by hand ✍️ ~ 19 steps walkthrough below (Linear vs RBF) Support Vector Machines reigned supreme in machine learning before the deep learning revolution. An SVM predicts with dot products, the same matrix multiplication every model uses. What it does not do is train by backpropagation: it is fitted by convex optimization, so there is no matrix-multiplication backward pass for a GPU to accelerate. I drew and calculated two SVMs by hand: a linear one (top) and an RBF one (bottom), classifying the same two test vectors. Goal: turn six training vectors and their learned coefficients into a prediction, and see what changing the kernel actually changes. = 1. Given = Six training vectors, their labels, and the coefficients and bias already learned. A coefficient of zero means that vector is not a support vector: too far from the boundary to matter. = 2. Linear kernel, test vector 1 = Let us take the dot product of the test vector with every training vector. The dot product stands in for cosine similarity, and the column of results is the first column of the kernel matrix K. = 3. Linear kernel, test vector 2 = We do the same for the second, and K is complete. = 4. Signed weights = Let us multiply each coefficient by its label. The second training vector drops out here, because its coefficient is 0. = 5. Weighted combination = We multiply the signed weights through K and add the bias b. The result is a signed distance to the decision boundary: 17 and 5. = 6. Classify = Let us take the sign. Both are positive. = 7 to 11. RBF kernel, test vector 1 = Now the same picture with a different kernel, in five moves: square the differences, sum them, take the square root for the L2 distance, multiply by minus gamma, and raise e to that power. The negation is what turns a distance into a similarity, and gamma controls how far a single training vector's influence reaches. = 12 to 16. RBF kernel, test vector 2 = We repeat all five. The numbers change, the moves do not. = 17 to 19. Decision boundary, again = Signed weights, weighted combination, sign. Identical arithmetic to steps 4 through 6, on a K that was built a completely different way. The outputs: Linear K, first column = [13, 25, 12, 15, 19, 27] Linear decision values = 17 and 5, both positive RBF decision values = -2 and 1, so negative and positive The takeaway: the kernel is the only thing that changed, and it changed the answer. The linear SVM calls both test vectors positive; the RBF one splits them. Everything after the kernel matrix, the signed weights and the weighted combination and the sign, is the same page of arithmetic twice. 💾 Save this post!

Tom Yeh

16,916 görüntüleme • 1 ay önce

THIS GUY CONNECTED HIS AI AGENTS TO HIS OBSIDIAN AND BUILT A BRAIN THAT LEARNS ON ITS OWN. HERE'S HOW TO BUILD IT Obsidian is just markdown files sitting in a folder. That turns out to be the perfect memory for an AI agent, because an agent can read and write those files directly. He wired his agents into the vault so they pull context from it, do the work, and write what they learned back. The notes aren't the point. The loop is, and it gets sharper every cycle How to build it: 1. Point an agent at your vault. The fastest way, no plugins, no API keys: open a terminal and run npx obsidian-mcp /path/to/your/vault. That exposes your Obsidian folder to Claude as a tool it can read, search, and write to. Add it to your Claude Code or Cowork config and restart 2. Confirm it can see the brain. Ask it: "list the notes in my vault and summarize what's in them." If it reads them back, the connection is live. Now it starts every task with everything the vault already holds instead of from zero 3. Give each agent one job and a write-back rule. Tell it: "research this, then save what you found as a new note in /brain with links to related notes." One agent researches, one summarizes, one plans. Each writes its output back into the vault 4. Close the loop. Add one line to every agent's instructions: "read /brain before starting, write your result back when done." Now each task leaves the vault richer, and the next run reads that before it works. It compounds instead of resetting 5. You only steer. Review what the brain produces, point it at the next thing. The agents handle the reading, writing, and connecting The edge isn't better notes. It's a brain that feeds itself, so the work gets sharper every cycle instead of starting over Bookmark this

Yarchi

58,549 görüntüleme • 3 ay önce

Larry Ellison just told every software engineer on Earth their job description is dead. Not evolving. Dead. Ellison: “The code that Oracle is writing, Oracle isn’t writing. Our AI models are writing.” This is not a startup demo. This is one of the largest infrastructure monopolies on the planet telling you it already replaced the people who built it. For fifty years, building software meant translating human intent into machine instructions. Line by line. Bug by bug. Sprint by sprint. That entire layer is gone. Ellison: “We don’t write the procedure. We declare our intent.” That sentence just made the entire engineering labor market flinch. The procedure was the job. The procedure was the paycheck. The procedure was what made a developer valuable. And now the machine does it without being asked twice. Ellison: “We just tell the model what we want the program to do, and then the AI comes up with a step-by-step process to actually do it.” You are no longer paid to build. You are paid to think. And most organizations have no idea how to evaluate that. The companies still hiring armies of developers to grind through codebases are paying salaries the machine already made worthless. Not in years. In seconds. When a company worth hundreds of billions hands the keyboard to the machine and tells you the output is better, the debate is not winding down. The debate is over. The enterprise that wins this decade does not write the best code. It removes the human from the process entirely and runs on intent alone. The programmers who survive are the ones who realize the craft is no longer typing. It is architecture. It is judgment. It is knowing what to build and why. Everything else now belongs to the machine. And the machine does not negotiate severance.

Dustin

536,136 görüntüleme • 5 ay önce