|2005 - current
Google (www.google.com): Software Engineer
Platforms group, writing performance and machine health related softwares for Linux. Member of the C++ readability team.
|2003 - 2005
BitRaker: Software Engineer
Creating library to process and patch ARM and Thumb binaries, instrumenting ELF executables for static and runtime analysis. Intimate knowledge of assembly and runtime libraries for ARM and Thumb architectures.
- Instrument binaries at instruction level.
- Return detailed information for static analysis.
- Debug symbols.
- Register input/output dependencies.
- Memory addressing mode.
- Callgraph data.
- Feedback register and memory information to analysis code during runtime.
- Effective addresses.
- Predicate state.
- Arbitrary user-supplied data.
- Creating an environment for analysis.
- Design and implement customizable emulation cores.
- Transition between original code and analysis code.
- Transition between simulation and host environments.
- Real time control over analysis code through sockets.
- Maintain portability between Windows and Linux environments.
- Modifying execution behavior.
- Relocating runtime heap and stack.
- Create customized development tools for automation.
- Automated test environments.
- Strong encryption/decryption of analysis data.
- License protection.
Co-author of patent: System and method of analyzing interpreted programs
|2001 - 2003
Entropia: Software Engineer
Creating and maintaining low-level (NT Native API) code to extend Windows kernel functionalities, to provide safe and secure execution environment for applications. Extensive experience in Windows file system. Knowledge of grid computing platform and applications.
- Intercepting and modifying behavior of various file / registry / memory / winsock / GUI API functions.
- Provide transparent file encryption / isolation.
- Registry isolation / hide existing keys / emulate missing keys.
- Swap file isolation / pagefault management.
- GUI hiding / capturing.
- Blocking network access.
- Making all product features configurable.
- Debug and modify application behavior at binary level, without source code.
- Trace / capture program behavior.
- Modify program execution paths.
- Dynamically control application environment.
- Compensate for functional and behavioral differences between different versions and releases of Windows.
- Address space / handle management differences.
- Error handling / recovery.
- Undocumented APIs such as CreateProcessInternalW.
- Windows / Linux intergration
- Created NFS server for file sharing.
- Customizing VMware GSX server / Connectix VirtualServer for automated management.
- Create customized development tools to automate testing and build process.
|2000 - 2001
Professor Kube (UCSD CS department): Proctor for CSE 11 / 12 / 100
Answer students' questions about assignments, courses, and often the curriculum in general. Also responsible for grading exams and assignments.
- Grade exams / assignments.
- Resolve ambiguities in course assignments.
- Guide students to proper engineering practices.
Professor Nelson (3D ultrasound imaging group): Software Engineer
Creating tools to examine and visualize animated 3D volume data in real time, for high-end PCs with OpenGL and specialized hardware.
- Load / save standardized volume formats.
- Implement / optimize 3D filters.
- Organize interface widgets for functional use.
- Optimize for responsiveness and memory usage.
|1998 - 2001
IST Diving Equipment: Webmaster
Maintaining online catalog for a multi-national sport equipments company, creating automated management tools.