Security research moves fast. Your debugging tools should too. When you're staring at assembly output trying to understand stack corruption or heap layout, every minute counts. Traditional GDB workflows can be painfully slow for security research and exploit development. That's exactly why Trail of Bits engineer, disconnect3d, built Pwndbg: a Python tool that augments GDB and LLDB with intuitive context displays and powerful commands specifically designed for security work. At EuroPython today (10:30, Terrace 2A), he'll demonstrate how Pwndbg can: 1. Visualize stack canaries and heap allocators in real-time 2. Dramatically speed up exploit development workflows 3. Make assembly analysis accessible to more security researchers 4. Streamline low-level debugging with Python-powered automation This 45-minute advanced track session is perfect for security professionals, systems programmers, and anyone working at the intersection of Python and low-level systems. https://lnkd.in/gMApQdZW
Pwndbg: A Python Tool for Faster Security Research
More Relevant Posts
-
🐍Python 3.14 now allows the Global Interpreter Lock (GIL) to be disabled. For 💨 Airflow users, that’s big. The new free-threaded build (PEP 703) lets Python run true parallel threads in one process. No multiprocessing overhead. No fake concurrency. What this could mean for Airflow: • Scheduler: Parse DAGs in parallel using threads. Faster startup for large environments. • Executors: Replace process pools with thread pools. Lower memory use and faster task execution. • Sensors: Run many waiting tasks efficiently in one process. • PythonOperators: Real multi-threading inside tasks. All CPU cores finally put to use. Single-thread performance drops slightly (about 5–10%), but multi-threaded workloads scale far better. Airflow won’t switch overnight, but this opens new ground. Python 3.14 makes true concurrency possible. The next Airflow releases could get faster without new hardware.
To view or add a comment, sign in
-
-
📱 Smartphone-Controlled Robotic Arm | MQTT | igus REBEL 6DOF Project In this video, I demonstrate my custom-built robotic arm project using the igus® REBEL 6DOF manipulator, powered by MQTT. 🔗 GitHub Repository Check out the full source code and documentation here: 👉 https://lnkd.in/eZ8nWF5F 🧠 Project Highlights: MQTT communication from phone to robot Pick and place automation with a gripper Custom Python scripting for robot movements Fully self-developed and tested system 🛠️ Technologies Used: igus® REBEL 6DOF Robotic Arm MQTT protocol Python
To view or add a comment, sign in
-
Python’s GIL in 2025: What Changes, What Doesn’t (3.14) ⚙️🐍 • GIL recap: In CPython, the Global Interpreter Lock forces at most one running thread per process, so CPU-bound multi-threading doesn’t scale across cores. I/O-bound threads are fine; CPU-bound work benefits from multiprocessing. • What’s new in 3.14: Optional no-GIL builds aim to remove that bottleneck. Expect wins on CPU-bound workloads with true multithreading—if deps and extensions play nicely. • Engineering guidance: • For I/O: threading is still great. • For CPU: today → multiprocessing/vectorized libs; explore no-GIL builds as your deps gain support. • Profile first: many real-world pipelines are I/O-bound or C-accelerated already. • Prod checklist: Watch extension compatibility, thread-safety, and memory contention; measure throughput and P95 latency before flipping defaults. Hashtags: #dailydoseofds #datascience #machinelearning #MLOps #Python #GIL #Concurrency #Multithreading #Multiprocessing
To view or add a comment, sign in
-
If your function signature is `handle(int s)`, you have zero type safety. `s` could be a status code, a user ID, or an age. The compiler can't tell the difference, allowing invalid values to cause chaos. The solution: "Enums". 🗸 An Enum is a unique data type with a fixed, named set of values. 🗸 Compile-Time Safety: The compiler flags errors if you use a value not on the list (e.g., trying to set a status to 99). 🗸 Data Modeling: Advanced enums (Rust/Python) hold data and enforce exhaustive pattern matching, preventing bugs when new states are added. Stop relying on brittle constants. Start using enums to enforce correct logic at compile time. https://lnkd.in/e6tnxzYP #CodingBestPractices #SoftwareEngineering #TypeSafety #Programming
To view or add a comment, sign in
-
-
🔥 Day 112 of 160 – GeeksforGeeks #gfg160 DSA Challenge 🔥 🎯 Problem: Longest Common Subsequence 🧠 Approach: Solved this quintessential dynamic programming problem using a bottom-up tabulation method. The core of the solution is a 2D DP table, dp[i][j], which stores the length of the longest common subsequence between the first i characters of string 1 and the first j characters of string 2. I initialized a (n+1) x (m+1) DP grid with zeros. I iterated through the strings. For each pair of characters s1[i-1] and s2[j-1]: If the characters match, the LCS length increases by one from the length of the LCS of the strings without these characters: dp[i][j] = 1 + dp[i-1][j-1]. If they don't match, the LCS length is the maximum of the LCS found by either excluding the current character from string 1 (dp[i-1][j]) or from string 2 (dp[i][j-1]). The final answer is the value in the bottom-right cell of the table, dp[n][m]. This approach systematically builds the solution from smaller subproblems, resulting in an $O(n \cdot m)$ time and space complexity. ✅ 1115 / 1115 test cases passed ⚡ Accuracy: 100% 🏆 Points Scored: 4 / 4 🕒 Execution Time: 1.23s 🔑 Key Learning: The Longest Common Subsequence (LCS) problem is a pillar of dynamic programming. Understanding its recurrence relation is crucial for solving a wide range of related problems, from sequence alignment in bioinformatics to file comparison diff utilities. It perfectly demonstrates the DP principle of solving a problem by combining the solutions to its overlapping subproblems. 💪 Progress Update: Day 112 is in the bag! Another foundational DP problem conquered. The pattern is becoming clearer with each problem. Let's keep this momentum! 🚀 Next ➡️ Day 113 – Longest Palindromic Subsequence #Day112 #GeeksforGeeks #gfg160 #DSA #CodingChallenge #Python #ProblemSolving #DynamicProgramming #DP #LCS #100DaysOfCode #Programmer
To view or add a comment, sign in
-
-
🐍 Python is finally removing the Global Interpreter Lock (GIL) — and that’s HUGE. What was the problem? The GIL prevented Python from executing more than one thread at a time, even on multi-core CPUs. So your “multithreaded” Python code was actually running sequentially. Why wasn’t it removed earlier? - Memory safety concerns. - Compatibility with existing C extensions. - Performance trade-offs for single-threaded apps. What’s changing now? ✅ True parallelism across multiple cores. ✅ Same multithreaded code — now 4x–8x faster on modern CPUs. The catch: - You’ll need explicit locks and thread-safety handling. - Some code that “accidentally worked” before might break. 📦 Available now: Python 3.13 (experimental). 🚀 Production ready: Python 3.14+ (2025). #python
To view or add a comment, sign in
-
🚀 Automating ThousandEyes ICMP Tests with Python Manually creating 40+ ICMP tests in ThousandEyes? No thanks. I wrote a short Python script that reads a simple CSV (ip,name) and creates Agent-to-Server ICMP tests automatically using the v7 API. ✅ Finds my thousandeyes-agent id automatically ✅ Disables BGP for private IPs ✅ Creates tests instantly from a CSV Result: consistent monitoring, no manual clicks, and an API workflow I can rerun anytime. If you’re using ThousandEyes in your lab or production network, automate it once, and let the API handle the rest. 😎 Link to the blog post in the comment section ⬇️ #ThousandEyes #PythonAutomation #NetDevOps #Monitoring #Cisco
To view or add a comment, sign in
-
🔥 Day 111 of 160 – GeeksforGeeks #gfg160 DSA Challenge 🔥 🎯 Problem: Longest String Chain 🧠 Approach: This problem is a fantastic variation of the Longest Increasing Subsequence (LIS) pattern, adapted for strings. I used a dynamic programming approach with a hash map for memoization. Sort: The key first step was to sort the input array of words by their length. This ensures that when I process a word, I have already computed the chain lengths for all its potential predecessors (which must be shorter). DP with a Map: I used a dictionary dp where dp[word] stores the length of the longest chain ending with that word. Iterate and Build: For each word in the sorted list, I initialized its chain length to 1. Then, I generated all possible predecessors by removing one character at a time. If a predecessor existed in my dp map, I updated the current word's chain length to be max(current_length, predecessor_length + 1). Track Maximum: A separate variable kept track of the overall maximum chain length found. This $O(N \cdot L^2)$ approach, where N is the number of words and L is the max word length, was efficient enough to pass all test cases. ✅ 1114 / 1114 test cases passed ⚡ Accuracy: 100% 🏆 Points Scored: 4 / 4 🕒 Execution Time: 2.71s 🔑 Key Learning: This problem reinforces the idea that the core logic of LIS can be applied to various contexts beyond just numbers. The "predecessor" relationship defines the "increasing" property. Sorting the input based on a specific criterion (here, string length) is a crucial pre-computation step that makes the DP state transitions possible in a single pass. 💪 Progress Update: Day 111 is done! It's really cool to see how fundamental DP patterns can be adapted to solve different kinds of problems. Let's keep the chain going! 🚀 Next ➡️ Day 112 – Longest Common Subsequence #Day111 #GeeksforGeeks #gfg160 #DSA #CodingChallenge #Python #ProblemSolving #DynamicProgramming #DP #StringManipulation #100DaysOfCode #Programmer
To view or add a comment, sign in
-
-
Python launched its latest 3.14 version — and it brings two major updates that change everything! 🚀 💡 1️⃣ No more GIL (Global Interpreter Lock) Earlier, Python could only run one thread at a time, even on multi-core CPUs. With Python 3.14, GIL is finally optional, meaning: ✅ True multi-threading ✅ Faster performance for AI, ML, and data-heavy tasks ✅ Better use of all CPU cores 🧵 2️⃣ T-Strings (Template Strings) A new way to handle strings! t"Hello {name}" doesn’t just print text — it keeps the structure of your template, making string handling safer, cleaner, and more powerful for developers. 👉 Does this change make your coding life easier? Let me know in the comments below 👇 #python314 #AIML #pythonupdate #linkedin
To view or add a comment, sign in
-
-
⚡️Our CANedge XCP Python tool now also supports CCP! https://lnkd.in/djDeUK4X The tool lets you provide your CCP/XCP A2L file and a CSV with the measurements/signals you wish to record. Using this, the tool auto-generates a CANedge transmit list and DBC file. This lets you easily log your ECU data with the CANedge and analyze it with e.g. the asammdf GUI, Grafana dashboards, python-can, Vector tools, MATLAB and more. For CCP, the tool supports optionally the 'BYTES_ONLY' A2L flag (where initialization of multi-byte signals have to be done 1 byte at a time). For XCP on CAN, the tool supports CAN FD (incl. WRITE_DAQ_MULTIPLE). The Python tool also lets you add your DAQ transmit list to an existing CANedge Configuration File (incl. validation) and even lets you create transmit lists for multi-ECU communication. Today, the canedge-ccp-xcp tool is actively used by OEM engineers for both CCP/XCP data acquisition in prototype vehicles. If you have questions on using the tool, contact us - we are happy to provide detailed technical guidance to get you started. Learn more below: - CANedge: https://lnkd.in/eWf6ZFka - CCP/XCP intro: https://lnkd.in/ep9xYQ9p - A2L intro: https://lnkd.in/dCAbwk5C - canedge-ccp-xcp github: https://lnkd.in/dW-j2sbh - Contact us: https://lnkd.in/eK7dmrYy #ccp #xcp #canbus #diagnostics #automotiveengineering
To view or add a comment, sign in
-
Pwngdb + pwn.tools is a match in heaven! However i sometimes switch to Gef, especially its scan command is golden.