Richard Gorton
Framingham, MA 01701 (508) 820-7672 rcgorton@verizon.net
SENIOR SOFTWARE ENGINEER
Software Engineer with a proven track record of developing, improving and debugging products. Recognized for working on code which must be correct, robust, and performant. Demonstrated expertise with compiler code generators, runtime libraries, interpreters, and virtualization. Intercepted and manipulated system semantics on Windows, Linux, and Android from the API level down to the system and instruction level call. Experience developing ‘backend’ web-based microservices.
Technical Skills
Products – security, binary translation/virtualization, [cross-]compilers, interpreters
Languages – C++, C, Python. Some SQL, Go, Lua, OpenCL, Java. Multiple block structured languages
Assembly Languages – x86_64, ARM, SPARC, Power
Targets – Linux, Windows, AWS, Solaris, Android (J)
Process Tools – git, Azure Dev Ops, Jira, Visual Studio, Jenkins, Perforce, Bugzilla
Additional Tools – VirtualBox, VMWare, MySQL workbench, Valgrind, Dalvik VM
Coding examples and personal web site – http://gorton-machine.org/rick
Professional Experience
Cytrio, Inc. 2020
Sr. Software Engineer
Early employee at a stealth mode security start-up
Python (Flask) + SQL to develop a product for deployment on AWS/Terraform. Designed implemented, and augmented various back-end components (including creating unit tests):
PI (personal information) scanners for structured (MySQL) data via constraint-based regular expressions
Licensing module: Architected relevant Database tables, and accessed them via Python
Delivered initial implementation of tenant user administration (add/remove/permissions/roles)
Wrote unit tests for all of the above: cURL, python, bash
Workflow support:
added support for task comments
Implemented Audit logging consumer code to track workflow for compliance verification
Modified, debugged, and extended various Flask routes
Digital Guardian 2017 - 2019
Principal Software Engineer
Revised and extended 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.
Decoded IETF protocols and supported 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').
Developed 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
OpenMobile World Wide 2015 - 2016
Sr. Software Engineer
Enable arbitrary Android-J (Angry Birds…) applications to run seamlessly on Windows 10
Provided support for various Android libc APIs using native Windows mechanisms.
performed semantic conversions where applicable: pthreads, sockets/networking, pseudo-devices including /dev/urandom, wchar t conversions.
Extended existing ARM v7a Interpreter to support VFP instructions - written in x86_64 assembly
Wrote a custom Python tool to automatically inject instrumentation code into an arbitrary Android .apk. The resultant apk logged method entry, parameter values, and return values.
Cognitive Electronics 2013 -2015
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 architectural simulator to support system calls and performance data collection. Performance data included instruction execution and function call summary.
Implemented key libc routines in assembly language. The str* routines utilized the PopCount instruction.
Debugged assembler as needed (written in Python)
Implemented test automation to verify compiler correctness
Independent Developer 2012 - 2013
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
AMD 2007 - 2012
Sr. Member Technical Staff
Developer on a dynamic binary optimization tool for Windows7 and Linux resulting in achieving a 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
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.
Developed and shipped V1.0 of the product on Windows and Linux using OpenCL and data-parallel concepts
Okena/Cisco Systems 2001 - 2007
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.
API NetWorks: 2000 - 2001
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
Compaq/DEC 1992 - 2000
Principal Software Engineer
Alpha Migration Tools group
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.
Patents, Advisories, Publications
Issued US Patents
Methods and apparatus for securing local application execution – 7721281 https://patents.google.com/patent/US7721281B1/en?oq=7721281
Bounded hash table sorting in a dynamic program profiling system – 8024710 https://patents.google.com/patent/US20100114915
Security advisories
discoverer of CERT-2006-1174 (useradd)
Publications
HotChips 11: "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
Gorton Machine Archives: http://gorton-machine.org – a history of the company (est. 1893)
Education
University of Wisconsin Parkside
BSc: Applied Computer Science