Gordon is a software development engineer, specializing primarily in code protection, anti-debugging, and anti-reverse engineering. He also has a background in malware analysis and talks about himself in the third person. Prior to being a software engineer, he has been an Indian chef, made stained glass windows, and made large multibreak italian style aerial shells for fun. He also did things without anti- in front of them which are somehow related.
Gordon would like to be photographing nature instead and designing formulas for fractal artwork instead of programming. He would also like a billion dollars and that isn’t happening either.
I’m currently a contractor working on site back end design, or as they’d call it in a job listing, “FULL STACK DEVELOPMENT”. Previously I worked with C++ and multiple assembly languages on an obfuscating compiler built around the LLVM system. A quick list of languages I know fluently, followed by some I haven’t used in years but would probably be proficient in within a couple of week.
If you don’t believe this list, I hold an equally strong belief that you are nothing.
Sorry profusely in advance for this painfully long list. I needed to make it for reasons but didn’t think it would be quite that bad.
Expert Proficiency Languages and Tools
“Normal” Languages and Tools
- C++ (up to C++17 and drafts for future versions)
- C (K&R up to current standard)
- LLVM IR
- LLVM TableGen
- LLVM MachineIR
In order of fluency
- x86/x86_64 dating to 8086 (Protected mode and Real Mode)
- 80×86 in raw hex
- ARMv4-8, Thumb, and Thumb2
- Fujitsu FR Series
- PowerPC / Cell ABI
Web and Unixy
- Twig HTML Templating
- SQL (MySQL variant primarily)
Libraries and Frameworks
- The LLVM System
- Reprise LM
Makefiles, Data Formats, and Scripting
- BASH / SH
- Windows Batch
- GNU Make
- The other 8 make systems shoe-horned into every open-source project
- Protip: One of these will inevitabaly prevent the bulid from completing on at least one OS or target without some extensive modifications, despite what OSes are supported by the project and build system in question. CMake is almost always the culprit, usually indirectly. The tool itself is very good. Using a python script to build a makefile that builds a v8 JIT that runs Node.js to find files in a directory so they don’t have to look up add_directory() is not good. If you’ve never seen anything like that, comment on this page and Ill forward you some choice projects.
- CMake is almost always the culprit due to lack of tutorial-form public documentation on its file format — people tend to shoehorn 8 other build sytems and unrelated scripting languages into the mess to do something they didn’t want to bother looking up directly using CMake, then you end up with windows build having a requirement for MinGW being installed despite the build itself using MSVC, because they didn’t realize that Windows has supported frontslashes in pathnames for the past 30 years.
- Not to get into a rant (actuall that’s all I’m doing here), the portability issues of Linux software to Windows may have been Microsoft’s problem years ago… but I don’t think it is anymore. Fucking quit writing AT&T syntax x86 assembly (Intel has a syntax for this, it’s named after them), upgrade your GCC to something newer than 10 years or install Clang and do your development under that. If you write your software in modern GCC or Clang the windows port is going to involve compiling it. Full stop.
Advanced Topics in Tools and Toolchains
- I configure cross-tool chains for which compilers, proper headers, build system OS / Target support, and required libraries may or may not exist, and I’m good at it.
- I am able to avoid XCode with near perfect efficiency, even when it is required for a task.
- Protip2: The other day I built an open source project which used CMake for built setup, and Visual Studio to build. I expected a nightmare (the find_boost() from CMake has been failing lately on my builds), but someone had integrated Hunter which actually found, managed and built packages for dependencies on Windows correctly. I’m not going to lie, I actually pooped a little. I’m mainly / originally a Windows guy but it was like I got that thing I really liked about Perl and Linux all of a sudden.
Tools & Make Software
- Doxygen / PHPDoc
- PHPUnit (lol unit)
- IDA Pro
- WinDBG / OllyDBG
- Mandiant Memoryze
- Clang / LLVM System
- GCC / GAS
- CL / LINK (MS Visual Studio at 2015 version currently)
- FASM / FASMARM
- A86 Assembler
Languages and tools I learned extensively
…over 20 years ago, or started to learn sooner, but consider myself rusty with because of lack of recent use
- QuickBASIC & QBASIC
- C# / .NET
- Visual Basic 4.0 (please don’t hate me)
- Java :-(, Mostly due to rage at it
- HLSL / GLSL
- NuMega SoftICE
- QuakeC 🙂