firstname.lastname@example.org (H) 508-820-7672
161 Temple St. Framingham, MA 01701
Summary: Seeking a position on a team enabling me to help create or improve software products. Delivering a product is always interesting and fun. I have found that I am better at debugging and refactoring than I am at designing major subsystems from scratch. Comfortable working on code which needs be robust and performant: compiler code generators, runtime libraries, interpreters, and products which rely upon various forms of virtualization to intercept/convert API semantics.
Intercepting and manipulating system semantics on Windows, Linux, and Android. From the API level down to instruction and system call levels (occasionally inside the OS kernel).
Retargeting compiler code generators for many architectures, including custom ISAs.
Products: security, binary translation/virtualization, [cross-]compilers, interpreters.
Targets: Windows, Solaris, Linux, Android (J).
Languages: C++, C, Python, various block structured languages. Can read Go, Lua, OpenCL, Java
Assembly languages: x86_64, ARM, SPARC, Power, and others
Process tools used: Jira, git, Perforce, Jenkins, Bugzilla, Visual Studio and more
Additional tools: VMWare, VirtualBox, Valgrind, Dalvik VM
Jan 2017 to present: Digital Guardian: Principal Software Engineer
Revise and extend existing Digital Loss Prevention agent support.
Web browser support
Binary Pattern patching of key routines in Chrome's SSL stack to correlate on-the-wire data with unencrypted data to be fed to the Digital Guardian content analysis engine to enable detection of uploads/downloads via web browsers on Windows.
IETF protocol decoding and support: HTTP/2, Chunked encoding, QUIC, TLS 1.3
Extended a follow-on proxy-based interception approach written in go/c++/lua to utilize a different security event ('SendMail'). Prototyped the code for a new webmail related event ('AttachMail').
Currently working on portions of a from-scratch rewrite of the existing agent ('CommonAgent' project) which supports Windows, MacOS, and Linux in a common code base.
Bug bashing. Fixed numerous customer bugs in the existing Windows agent, including some significant performance bugs and memory leaks
April, 2015 to October, 2016: OpenMobile World Wide: Sr. Software Engineer
Enable arbitrary Android-J applications to run seamlessly on Windows 10 (Angry Birds among others).
Implemented virtualized support for various Android libc APIs using native Windows mechanisms, performing semantic conversions where applicable For example, pthreads, sockets/networking, pseudo-devices such as /dev/urandom, wchar_t conversions.
Extended existing ARM v7a Interpreter to support VFP instructions - it was written in x86_64 assembly
Wrote a custom tool to automatically inject instrumentation code into an arbitrary Android .apk. The resultant apk logged method entry, parameter values, and return values.
April, 2013 to March, 2015: Cognitive Electronics: Sr. Software Engineer
Lead compiler and runtime developer for a custom (ASIC based) architecture:
Implemented a LLVM target for Cognitive's custom Data Parallel Architecture (LLVM 3.4 through 3.6) and musl (0.9.11 through 1.1.8)
Refinement of the ISA, including estimation of gains of additional instructions via architectural simulator.
Enabled compilation and link of arbitrary Fortran applications via DragonEgg
Enhanced our architectural simulator to support system calls and performance data collection. Performance data included instruction execution and function call summary.
Implemented key libc routines in asssembly language. The str* routines utilized our PopCount instruction.
Debug our assembler as needed (written in Python)
Implemented test automation to verify compiler correctness
October 2012 – April 2013: Independent Developer
Created a path-based, dynamic whole program path profiler in C++ using PIN – a binary instrumentation tool available from Intel.
Created a low-level API library to support AMD's LWP (LightWeight Profiling) architectural extension, which requires modification of the Linux kernel.
Enhanced valgrind to support LWP & submitted patches to the valgrind project
2007 to 2012: AMD: Sr. Member Technical Staff
Developer on a dynamic binary optimization tool for Windows7 and Linux. The objective of the project was to achieve the performance boost (in software) of a process 'bump'
Architected/Implemented the region-based code cache (multi-entry, multi-exit)
Implemented runtime support to enable:
Deciding which applications to optimize (implemented via sqLite)
Injecting hooks to start profiling & optimization
Result: we attained 5%-7% reduction in rendering time for PovRay on Windows for a 4 hour image (Pebbles).
Architect of the AMD String Library, which sped glibc string operations up by an order of magnitude.
Result: these changes were eventually integrated into glibc.
Developer on CodeXL, a unified GPU/CPU Profiler and GPU debugger for OpenCL on Windows7 and Linux.
Used valgrind to find (and squish) various bugs on Linux.
Learned OpenCL (and data-parallel concepts)
Result: we shipped V1.0 of the product on Windows and Linux
2001 to 2007: Okena/Cisco Systems: Software Engineer IV
Extend platform support for the Host Intrusion Prevention System to include Linux and Solaris 8,9
Architected user-space buffer overflow protection for Linux, Solaris 8/9
Implemented in-kernel system call-chain evaluation code. That is: detect that the origins of a system call are not from code on the stack or in data.
Maintained rule language compiler and interpreter.
2000 to 2001: API NetWorks: Member Technical Staff
Maintained Alpha specific device drivers, system exercisers, and Linux kernel code
Created Linux kernel patches which resulted in a 40% performance boost for Alpha
Wrote an article for Linux Journal about said improvements
1992 to 2000: Compaq/DEC: Principal Software Engineer
Alpha Migration Tools group (part of the semiconductor organization). Created tools to support the various chips being developed by the semiconductor organization:
Project lead for dynamic binary optimization project for Alpha, which would accellerate arbitrary existing user-space applications. The team was an invited presenter at HotChips 11
Project lead: modify the GNU tools to support the StrongARM 1500. The toolchain was available prior to chip availability
Enhanced GNU (egcs) tools on Alpha, getting a 5% performance improvement on generated code.
Project lead for multiple binary translator products: inputs were MIPS/Ultrix, MIPS/Irix, and SPARC/Solaris, and the target was Alpha/OSF1. At the time, some translated applications ran faster than natively built versions.
Ported Liant's family of compilers (Basic/C/C++/COBOL/Fortran77/PL-1) to multiple hardware platform and UNIX variants. Find, debug, and correct various compiler and/or runtime bugs.
Code Generator developer: create new compiler backends for: WE32100, RS/6000, M88K, SPARC to meet OEM requirements.
Patents, Advisories, Publications:
Issued US Patents (as inventor):
7721281 – Methods and apparatus for securing local application execution. Co-inventor with one other person
8024719 – Bounded hash table sorting in a dynamic program profiling system. Sole Inventor
Security advisory: discoverer of CERT-2006-1174 (useradd).
HotChips 11 (1999): "Wiggins/Redstone: an online program specializer"
Linux Journal Kernel Korner article: "Kernel Tuning Gives 40% Gains"
Path Profiling publications: "Dynamic Whole Program Profiling" and "Isometric Paths" (self-published)
Education: May, 1983: BSc: Applied Computer Science, University of Wisconsin Parkside
Other activities & Hobbies:
Philanthropy – Endowment founder:
Endowment for the Sciences, The Prairie School, Racine, Wisconsin
CS2100 Endowment (Computer Science) UW-Parkside, Kenosha, Wisconsin
Distinguished Alumni, 2016 UW-Parkside, Kenosha, Wisconsin
Assembling my PC's from components. I do refresh builds about every 18 months
Family history: http://gorton-machine.org