SlideShare a Scribd company logo
Function Argument detection
proposed on : 09.04.2016
Ahmed mohamed abd el Mawgood <IRC/telegram/Github @oddcoder>
email: <​ahmedsoliman0x666[at]gmail[dot]com​>
<​ahmedsoliman[at]oddcoder[dot]com​>
Blog: <​oddcoder.com​>
Abstract
Function is considered to be the basic code construction block. However, Radare2 is not
good at detecting anything beyond basic functions. Things like structures, OS specific
data types, function names are mostly unrecognized by Radare2 (with exceptions).
Adding support for this very feature will make Radare typical for static analysis for
malware , and reverse engineering. In general it will attract more users and build
concrete alternative to other commercial Software reverse engineering tools like
HexRays’s IDA pro, Hopper.
Motivation  
The benefits claimed by ​Google fit perfectly into all tasks offered by every other
organization. But what makes this task special for me is that it is the only task I wanted to
be done one day. And I got the chance to do it myself. Typically, I will be doing something
that probably many of the Radare2 community and myself will use on daily basis. What I
will really be looking forward to do it to prepare myself to be Mentor at GSoC at radare2.
If this task is taken I don’t think that their is another task that fits me.But suggestions will
be put in consideration.
Specifications
● All the work will be available online on my fork for ​Radare2 and
Radare2-regressions​.
● I am from Alex- Egypt the time zone is UTC+02:00gm
● Work will be pushed to the the ​main repo as soon as a functional piece of code is
written and debugged.
● I will start working on the task early (typically I will start coding on 22 April 2016
once google announce the results to save time as my final exams will start on 28
May and end on 16 June).
● Progress will be tracked on my personal blog ​oddcoder.com every friday and real
time on IRC/telegram channel.
● work will be 7-9 hours daily except for friday(weekend freeday).
Major Goals
1. Writing tests for the ​t ​command family and the corresponding ​pf ​commands and
enhancing them (issue ​#287​, ​#2189​, ​#3115​).
2. Enhancing support for variations of the fastcall calling convention (issue ​#4204​).
3. Supporting Naming local variables on the stack (issue​​#3735​).
4. Type propagation (MAIN INITIAL TASK) (issue ​#4291​)
a. When a local var is passed as an argument, the type must be inferred.
b. This must be done in a separate analysis command, because it needs
functions to be already analyzed to run. `aft` -> analyze function type or
`afp` analyze function propagations.
i. Input for this command is offset of a function. must walk its local var
usages and function argument passing
ii. output must be a list of r2 commands to register those arg types for
the functions called.
c. To analyze all type propagations just `aft @@ fcn*` (for example)
Optional Goals
1. Creating windows types,functions pre-compiled headers (issue ​#1883​, ​#3654​,
#3925​).
2. Creating POSIX types,functions pre-compiled headers.
Timeline
Before 23 April 2016
I will study the parts I will be working on, this will be defined by:
● Understanding how ​pf ​command works and its implementation(only subset
related to ​t​​command family).
● Understanding how ​t ​commands works and understand its implementation
in the code.
● Understanding the anal (analysis subsystem) found in ​libr/anal/*.c ,
(libr/anal/types.c and libr/anal/fcn.c), , libr/anal/var.c , libr/core/cmd_anal.c)
● Understanding Radare2 lists libr/include/r_list.h
● Research about fastcall calling conventions and refresh my memory about
it.
● OPTIONAL:​Understanding SDB. ​The docs
23 April-30 April:
● Writing Tests/fixing all of the following ​t​, ​to​, ​t-​, ​tf​, ​td​, ​tb​, ​te​, ​tl​, ​tk 
● Implement ​td­
● Fixing ​t*
● Writing tests for both ​td​and ​t*
● implementing(or fixing the existing implementation of) ​ts
1May-10 May
● Creating ​afA that extract function parameters from registers in case of
fastcall only with similar behavior to that of ​afa​.
● Creating test cases to test for the correct implementation using existing
binaries in radare2-regressions and possibly but not mandatory specifically
crafted binaries.
● OPTIONAL​: merging both ​afa and ​afA ​so user will not need to think which
to use.
11 May-23 May:
● Studying the behaviour of ​-fomit-frame-pointer​in gcc.
● Adding support for naming local Variable compiled with
-fomit-frame-pointer​under gcc.
● Writing Tests for functions compiled with ​-fomit-frame-pointer​.
● OPTIONAL:​adding support for similar under different compiler typically
MSVC.
23 May-16 June:
● I will have to stop and prepare for my final exams
17 June- 5 August:
● Researching on the best way to store the list of local variables (pros/cons).
● Creating a list for the usage of ebp based local variables/formal
arguments.
● Creating a list for the usage of esp based local variables/formal arguments.
● Creating a list for the usage of fastcall style local variable/formal argument.
● Implementing type inference algorithm for the variable (decision making)
● Re-implementing Type inference,variables enumerating but with recursively
● Implementing intel x86 architecture specific type inference algorithm
● Writing tests for everything
5 August-15 August:
● Cleaning the code.
● Fixing ​Coverity Scan​errors.
● Adding missing tests.
● Responding to ​issues​related to my code.
15 August-20 August:
● OPTIONAL:​Creating windows types and functions pre-compiled (into SDB)
headers.
● OPTIONAL:​Creating POSIX compatible OS types and functions precompiled
header.
Micro-Tasks solved:
I have made bunch of commits to the codebase ​Radare2 and ​Radare2-regressions​. My
goal was to demonstrate both coding speed / ability to adopt & work with unknown code
base within short time.
All my commits are referenced ​here​and ​here​most notable are :
● Adding initial support for pic18c disassembler
● pic18c analysis plugin (coloring)
● enhancing the jump instruction family
● adding tests for pic
GSoC experience:
This is my first time to apply at Google summer of code. Last year I wanted to apply but I
didn’t because I thought I was not prepared enough. This year I applied only for this one
task. The reason is that their is no any other project that is Reverse engineering and code
analysis based.

More Related Content

What's hot

Functional Programming in JavaScript & ESNext
Functional Programming in JavaScript & ESNextFunctional Programming in JavaScript & ESNext
Functional Programming in JavaScript & ESNext
Unfold UI
 
Property-based testing an open-source compiler, pflua (FOSDEM 2015)
Property-based testing an open-source compiler, pflua (FOSDEM 2015)Property-based testing an open-source compiler, pflua (FOSDEM 2015)
Property-based testing an open-source compiler, pflua (FOSDEM 2015)
Igalia
 
20140408 tdd puppetcamp-paris
20140408 tdd puppetcamp-paris20140408 tdd puppetcamp-paris
20140408 tdd puppetcamp-paris
Johan De Wit
 
Lambda expression par Christophe Huntzinger
Lambda expression par Christophe HuntzingerLambda expression par Christophe Huntzinger
Lambda expression par Christophe Huntzinger
Mik_Arber
 
Oop to fp
Oop to fpOop to fp
Oop to fp
Michel Perez
 
Code Generation Cambridge 2013 Introduction to Parsing with ANTLR4
Code Generation Cambridge 2013  Introduction to Parsing with ANTLR4Code Generation Cambridge 2013  Introduction to Parsing with ANTLR4
Code Generation Cambridge 2013 Introduction to Parsing with ANTLR4Oliver Zeigermann
 
Instrumenting Go (Gopherconindia Lightning talk by Bhasker Kode)
Instrumenting Go (Gopherconindia Lightning talk by Bhasker Kode)Instrumenting Go (Gopherconindia Lightning talk by Bhasker Kode)
Instrumenting Go (Gopherconindia Lightning talk by Bhasker Kode)
Bhasker Kode
 
Types of storage class specifiers in c programming
Types of storage class specifiers in c programmingTypes of storage class specifiers in c programming
Types of storage class specifiers in c programming
Appili Vamsi Krishna
 
FregeDay: Design and Implementation of the language (Ingo Wechsung)
FregeDay: Design and Implementation of the language (Ingo Wechsung)FregeDay: Design and Implementation of the language (Ingo Wechsung)
FregeDay: Design and Implementation of the language (Ingo Wechsung)
Dierk König
 
Java.util.concurrent.concurrent hashmap
Java.util.concurrent.concurrent hashmapJava.util.concurrent.concurrent hashmap
Java.util.concurrent.concurrent hashmap
Srinivasan Raghvan
 
FregeDay: Roadmap for resolving differences between Haskell and Frege (Ingo W...
FregeDay: Roadmap for resolving differences between Haskell and Frege (Ingo W...FregeDay: Roadmap for resolving differences between Haskell and Frege (Ingo W...
FregeDay: Roadmap for resolving differences between Haskell and Frege (Ingo W...
Dierk König
 
Lee.stat
Lee.statLee.stat
Antlr part2 getting_started_in_java
Antlr part2 getting_started_in_javaAntlr part2 getting_started_in_java
Antlr part2 getting_started_in_java
Morteza Zakeri
 
Hitchikers guide handout
Hitchikers guide handoutHitchikers guide handout
Hitchikers guide handout
Federico Campoli
 
F# and the DLR
F# and the DLRF# and the DLR
F# and the DLR
Richard Minerich
 
What is new in C# 6?
What is new in C# 6?What is new in C# 6?
What is new in C# 6?
Robert MacLean
 
Jfokus functional groovy
Jfokus functional groovyJfokus functional groovy
Jfokus functional groovyAndres Almiray
 
Slicing, Dicing, And Linting OpenAPI
Slicing, Dicing, And Linting OpenAPISlicing, Dicing, And Linting OpenAPI
Slicing, Dicing, And Linting OpenAPI
lestrrat
 

What's hot (19)

Functional Programming in JavaScript & ESNext
Functional Programming in JavaScript & ESNextFunctional Programming in JavaScript & ESNext
Functional Programming in JavaScript & ESNext
 
Property-based testing an open-source compiler, pflua (FOSDEM 2015)
Property-based testing an open-source compiler, pflua (FOSDEM 2015)Property-based testing an open-source compiler, pflua (FOSDEM 2015)
Property-based testing an open-source compiler, pflua (FOSDEM 2015)
 
20140408 tdd puppetcamp-paris
20140408 tdd puppetcamp-paris20140408 tdd puppetcamp-paris
20140408 tdd puppetcamp-paris
 
Lambda expression par Christophe Huntzinger
Lambda expression par Christophe HuntzingerLambda expression par Christophe Huntzinger
Lambda expression par Christophe Huntzinger
 
Oop to fp
Oop to fpOop to fp
Oop to fp
 
Code Generation Cambridge 2013 Introduction to Parsing with ANTLR4
Code Generation Cambridge 2013  Introduction to Parsing with ANTLR4Code Generation Cambridge 2013  Introduction to Parsing with ANTLR4
Code Generation Cambridge 2013 Introduction to Parsing with ANTLR4
 
Instrumenting Go (Gopherconindia Lightning talk by Bhasker Kode)
Instrumenting Go (Gopherconindia Lightning talk by Bhasker Kode)Instrumenting Go (Gopherconindia Lightning talk by Bhasker Kode)
Instrumenting Go (Gopherconindia Lightning talk by Bhasker Kode)
 
Types of storage class specifiers in c programming
Types of storage class specifiers in c programmingTypes of storage class specifiers in c programming
Types of storage class specifiers in c programming
 
FregeDay: Design and Implementation of the language (Ingo Wechsung)
FregeDay: Design and Implementation of the language (Ingo Wechsung)FregeDay: Design and Implementation of the language (Ingo Wechsung)
FregeDay: Design and Implementation of the language (Ingo Wechsung)
 
Java.util.concurrent.concurrent hashmap
Java.util.concurrent.concurrent hashmapJava.util.concurrent.concurrent hashmap
Java.util.concurrent.concurrent hashmap
 
FregeDay: Roadmap for resolving differences between Haskell and Frege (Ingo W...
FregeDay: Roadmap for resolving differences between Haskell and Frege (Ingo W...FregeDay: Roadmap for resolving differences between Haskell and Frege (Ingo W...
FregeDay: Roadmap for resolving differences between Haskell and Frege (Ingo W...
 
Lee.stat
Lee.statLee.stat
Lee.stat
 
Antlr part2 getting_started_in_java
Antlr part2 getting_started_in_javaAntlr part2 getting_started_in_java
Antlr part2 getting_started_in_java
 
me-and-python
me-and-pythonme-and-python
me-and-python
 
Hitchikers guide handout
Hitchikers guide handoutHitchikers guide handout
Hitchikers guide handout
 
F# and the DLR
F# and the DLRF# and the DLR
F# and the DLR
 
What is new in C# 6?
What is new in C# 6?What is new in C# 6?
What is new in C# 6?
 
Jfokus functional groovy
Jfokus functional groovyJfokus functional groovy
Jfokus functional groovy
 
Slicing, Dicing, And Linting OpenAPI
Slicing, Dicing, And Linting OpenAPISlicing, Dicing, And Linting OpenAPI
Slicing, Dicing, And Linting OpenAPI
 

Viewers also liked

Why Social Data Deserves More of Your Budget
Why Social Data Deserves More of Your BudgetWhy Social Data Deserves More of Your Budget
Why Social Data Deserves More of Your Budget
Falcon Social
 
STAT 3510 Presentation
STAT 3510 PresentationSTAT 3510 Presentation
STAT 3510 PresentationMegan Kaehms
 
ALUGO CASA EM JALES
ALUGO CASA EM JALESALUGO CASA EM JALES
ALUGO CASA EM JALES
SMS Digital
 
Oriana Fajardo Resume 2015-04-14
Oriana Fajardo Resume 2015-04-14Oriana Fajardo Resume 2015-04-14
Oriana Fajardo Resume 2015-04-14Oriana Fajardo
 
Чертеж топки Heat 88.66.01
Чертеж топки Heat 88.66.01Чертеж топки Heat 88.66.01
Чертеж топки Heat 88.66.01
КПД плюс
 
Equilibri e variazione bilancio
Equilibri e variazione bilancioEquilibri e variazione bilancio
Equilibri e variazione bilancio
Andrea Rozzoni
 
Ethics in Assessment
Ethics in AssessmentEthics in Assessment
Ethics in Assessment
PotterheadNove
 
Introduction to assessment
Introduction to assessmentIntroduction to assessment
Introduction to assessmentritamay_68
 

Viewers also liked (16)

Presentación1
Presentación1Presentación1
Presentación1
 
Why Social Data Deserves More of Your Budget
Why Social Data Deserves More of Your BudgetWhy Social Data Deserves More of Your Budget
Why Social Data Deserves More of Your Budget
 
STAT 3510 Presentation
STAT 3510 PresentationSTAT 3510 Presentation
STAT 3510 Presentation
 
project proposal takunda mubaiwa
project proposal takunda mubaiwaproject proposal takunda mubaiwa
project proposal takunda mubaiwa
 
Presentación1
Presentación1Presentación1
Presentación1
 
Arevalo
ArevaloArevalo
Arevalo
 
ALUGO CASA EM JALES
ALUGO CASA EM JALESALUGO CASA EM JALES
ALUGO CASA EM JALES
 
Aguilar_Roxanna_Reusme 16'(2)
Aguilar_Roxanna_Reusme 16'(2)Aguilar_Roxanna_Reusme 16'(2)
Aguilar_Roxanna_Reusme 16'(2)
 
Ron Hendrix Resume
Ron Hendrix ResumeRon Hendrix Resume
Ron Hendrix Resume
 
Oriana Fajardo Resume 2015-04-14
Oriana Fajardo Resume 2015-04-14Oriana Fajardo Resume 2015-04-14
Oriana Fajardo Resume 2015-04-14
 
Presentacion 4
Presentacion 4Presentacion 4
Presentacion 4
 
Чертеж топки Heat 88.66.01
Чертеж топки Heat 88.66.01Чертеж топки Heat 88.66.01
Чертеж топки Heat 88.66.01
 
Equilibri e variazione bilancio
Equilibri e variazione bilancioEquilibri e variazione bilancio
Equilibri e variazione bilancio
 
Ethics in Assessment
Ethics in AssessmentEthics in Assessment
Ethics in Assessment
 
Introduction to assessment
Introduction to assessmentIntroduction to assessment
Introduction to assessment
 
janes resume
janes resumejanes resume
janes resume
 

Similar to GooglePropsal

これからのPerlプロダクトのかたち(YAPC::Asia 2013)
これからのPerlプロダクトのかたち(YAPC::Asia 2013)これからのPerlプロダクトのかたち(YAPC::Asia 2013)
これからのPerlプロダクトのかたち(YAPC::Asia 2013)goccy
 
Half-automatic Compilable Source Code Recovery
Half-automatic Compilable Source Code RecoveryHalf-automatic Compilable Source Code Recovery
Half-automatic Compilable Source Code Recovery
Joxean Koret
 
Code quality par Simone Civetta
Code quality par Simone CivettaCode quality par Simone Civetta
Code quality par Simone Civetta
CocoaHeads France
 
Debugging Python with gdb
Debugging Python with gdbDebugging Python with gdb
Debugging Python with gdb
Roman Podoliaka
 
Optimizing and Profiling Golang Rest Api
Optimizing and Profiling Golang Rest ApiOptimizing and Profiling Golang Rest Api
Optimizing and Profiling Golang Rest Api
Iman Syahputra Situmorang
 
New c sharp3_features_(linq)_part_iv
New c sharp3_features_(linq)_part_ivNew c sharp3_features_(linq)_part_iv
New c sharp3_features_(linq)_part_ivNico Ludwig
 
The program reads data from two files, itemsList-0x.txt and .docx
The program reads data from two files, itemsList-0x.txt and .docxThe program reads data from two files, itemsList-0x.txt and .docx
The program reads data from two files, itemsList-0x.txt and .docx
oscars29
 
Road to sbt 1.0 paved with server
Road to sbt 1.0   paved with serverRoad to sbt 1.0   paved with server
Road to sbt 1.0 paved with server
Eugene Yokota
 
(1) c sharp introduction_basics_dot_net
(1) c sharp introduction_basics_dot_net(1) c sharp introduction_basics_dot_net
(1) c sharp introduction_basics_dot_net
Nico Ludwig
 
Puppet Camp Paris 2014: Test Driven Development
Puppet Camp Paris 2014: Test Driven DevelopmentPuppet Camp Paris 2014: Test Driven Development
Puppet Camp Paris 2014: Test Driven Development
Puppet
 
PHP Development Tools
PHP  Development ToolsPHP  Development Tools
PHP Development Tools
Antony Abramchenko
 
Aspect-oriented programming in Perl
Aspect-oriented programming in PerlAspect-oriented programming in Perl
Aspect-oriented programming in Perl
megakott
 
Compiler design notes phases of compiler
Compiler design notes phases of compilerCompiler design notes phases of compiler
Compiler design notes phases of compiler
ovidlivi91
 
ESIL - Universal IL (Intermediate Language) for Radare2
ESIL - Universal IL (Intermediate Language) for Radare2ESIL - Universal IL (Intermediate Language) for Radare2
ESIL - Universal IL (Intermediate Language) for Radare2
Anton Kochkov
 
Multicore
MulticoreMulticore
Reproducible Research in R and R Studio
Reproducible Research in R and R StudioReproducible Research in R and R Studio
Reproducible Research in R and R Studio
Susan Johnston
 
Dart the Better JavaScript
Dart the Better JavaScriptDart the Better JavaScript
Dart the Better JavaScript
Jorg Janke
 

Similar to GooglePropsal (20)

args_types
args_typesargs_types
args_types
 
これからのPerlプロダクトのかたち(YAPC::Asia 2013)
これからのPerlプロダクトのかたち(YAPC::Asia 2013)これからのPerlプロダクトのかたち(YAPC::Asia 2013)
これからのPerlプロダクトのかたち(YAPC::Asia 2013)
 
Half-automatic Compilable Source Code Recovery
Half-automatic Compilable Source Code RecoveryHalf-automatic Compilable Source Code Recovery
Half-automatic Compilable Source Code Recovery
 
Code quality par Simone Civetta
Code quality par Simone CivettaCode quality par Simone Civetta
Code quality par Simone Civetta
 
Debugging Python with gdb
Debugging Python with gdbDebugging Python with gdb
Debugging Python with gdb
 
Optimizing and Profiling Golang Rest Api
Optimizing and Profiling Golang Rest ApiOptimizing and Profiling Golang Rest Api
Optimizing and Profiling Golang Rest Api
 
C-Sharp 6.0 ver2
C-Sharp 6.0 ver2C-Sharp 6.0 ver2
C-Sharp 6.0 ver2
 
New c sharp3_features_(linq)_part_iv
New c sharp3_features_(linq)_part_ivNew c sharp3_features_(linq)_part_iv
New c sharp3_features_(linq)_part_iv
 
The program reads data from two files, itemsList-0x.txt and .docx
The program reads data from two files, itemsList-0x.txt and .docxThe program reads data from two files, itemsList-0x.txt and .docx
The program reads data from two files, itemsList-0x.txt and .docx
 
Road to sbt 1.0 paved with server
Road to sbt 1.0   paved with serverRoad to sbt 1.0   paved with server
Road to sbt 1.0 paved with server
 
(1) c sharp introduction_basics_dot_net
(1) c sharp introduction_basics_dot_net(1) c sharp introduction_basics_dot_net
(1) c sharp introduction_basics_dot_net
 
Puppet Camp Paris 2014: Test Driven Development
Puppet Camp Paris 2014: Test Driven DevelopmentPuppet Camp Paris 2014: Test Driven Development
Puppet Camp Paris 2014: Test Driven Development
 
Introduction to multicore .ppt
Introduction to multicore .pptIntroduction to multicore .ppt
Introduction to multicore .ppt
 
PHP Development Tools
PHP  Development ToolsPHP  Development Tools
PHP Development Tools
 
Aspect-oriented programming in Perl
Aspect-oriented programming in PerlAspect-oriented programming in Perl
Aspect-oriented programming in Perl
 
Compiler design notes phases of compiler
Compiler design notes phases of compilerCompiler design notes phases of compiler
Compiler design notes phases of compiler
 
ESIL - Universal IL (Intermediate Language) for Radare2
ESIL - Universal IL (Intermediate Language) for Radare2ESIL - Universal IL (Intermediate Language) for Radare2
ESIL - Universal IL (Intermediate Language) for Radare2
 
Multicore
MulticoreMulticore
Multicore
 
Reproducible Research in R and R Studio
Reproducible Research in R and R StudioReproducible Research in R and R Studio
Reproducible Research in R and R Studio
 
Dart the Better JavaScript
Dart the Better JavaScriptDart the Better JavaScript
Dart the Better JavaScript
 

GooglePropsal

  • 1. Function Argument detection proposed on : 09.04.2016 Ahmed mohamed abd el Mawgood <IRC/telegram/Github @oddcoder> email: <​ahmedsoliman0x666[at]gmail[dot]com​> <​ahmedsoliman[at]oddcoder[dot]com​> Blog: <​oddcoder.com​> Abstract Function is considered to be the basic code construction block. However, Radare2 is not good at detecting anything beyond basic functions. Things like structures, OS specific data types, function names are mostly unrecognized by Radare2 (with exceptions). Adding support for this very feature will make Radare typical for static analysis for malware , and reverse engineering. In general it will attract more users and build concrete alternative to other commercial Software reverse engineering tools like HexRays’s IDA pro, Hopper. Motivation   The benefits claimed by ​Google fit perfectly into all tasks offered by every other organization. But what makes this task special for me is that it is the only task I wanted to be done one day. And I got the chance to do it myself. Typically, I will be doing something that probably many of the Radare2 community and myself will use on daily basis. What I will really be looking forward to do it to prepare myself to be Mentor at GSoC at radare2. If this task is taken I don’t think that their is another task that fits me.But suggestions will be put in consideration. Specifications ● All the work will be available online on my fork for ​Radare2 and Radare2-regressions​. ● I am from Alex- Egypt the time zone is UTC+02:00gm ● Work will be pushed to the the ​main repo as soon as a functional piece of code is written and debugged.
  • 2. ● I will start working on the task early (typically I will start coding on 22 April 2016 once google announce the results to save time as my final exams will start on 28 May and end on 16 June). ● Progress will be tracked on my personal blog ​oddcoder.com every friday and real time on IRC/telegram channel. ● work will be 7-9 hours daily except for friday(weekend freeday). Major Goals 1. Writing tests for the ​t ​command family and the corresponding ​pf ​commands and enhancing them (issue ​#287​, ​#2189​, ​#3115​). 2. Enhancing support for variations of the fastcall calling convention (issue ​#4204​). 3. Supporting Naming local variables on the stack (issue​​#3735​). 4. Type propagation (MAIN INITIAL TASK) (issue ​#4291​) a. When a local var is passed as an argument, the type must be inferred. b. This must be done in a separate analysis command, because it needs functions to be already analyzed to run. `aft` -> analyze function type or `afp` analyze function propagations. i. Input for this command is offset of a function. must walk its local var usages and function argument passing ii. output must be a list of r2 commands to register those arg types for the functions called. c. To analyze all type propagations just `aft @@ fcn*` (for example) Optional Goals 1. Creating windows types,functions pre-compiled headers (issue ​#1883​, ​#3654​, #3925​). 2. Creating POSIX types,functions pre-compiled headers. Timeline Before 23 April 2016 I will study the parts I will be working on, this will be defined by: ● Understanding how ​pf ​command works and its implementation(only subset related to ​t​​command family).
  • 3. ● Understanding how ​t ​commands works and understand its implementation in the code. ● Understanding the anal (analysis subsystem) found in ​libr/anal/*.c , (libr/anal/types.c and libr/anal/fcn.c), , libr/anal/var.c , libr/core/cmd_anal.c) ● Understanding Radare2 lists libr/include/r_list.h ● Research about fastcall calling conventions and refresh my memory about it. ● OPTIONAL:​Understanding SDB. ​The docs 23 April-30 April: ● Writing Tests/fixing all of the following ​t​, ​to​, ​t-​, ​tf​, ​td​, ​tb​, ​te​, ​tl​, ​tk  ● Implement ​td­ ● Fixing ​t* ● Writing tests for both ​td​and ​t* ● implementing(or fixing the existing implementation of) ​ts 1May-10 May ● Creating ​afA that extract function parameters from registers in case of fastcall only with similar behavior to that of ​afa​. ● Creating test cases to test for the correct implementation using existing binaries in radare2-regressions and possibly but not mandatory specifically crafted binaries. ● OPTIONAL​: merging both ​afa and ​afA ​so user will not need to think which to use. 11 May-23 May: ● Studying the behaviour of ​-fomit-frame-pointer​in gcc. ● Adding support for naming local Variable compiled with -fomit-frame-pointer​under gcc. ● Writing Tests for functions compiled with ​-fomit-frame-pointer​. ● OPTIONAL:​adding support for similar under different compiler typically MSVC. 23 May-16 June: ● I will have to stop and prepare for my final exams 17 June- 5 August: ● Researching on the best way to store the list of local variables (pros/cons). ● Creating a list for the usage of ebp based local variables/formal arguments. ● Creating a list for the usage of esp based local variables/formal arguments. ● Creating a list for the usage of fastcall style local variable/formal argument. ● Implementing type inference algorithm for the variable (decision making) ● Re-implementing Type inference,variables enumerating but with recursively
  • 4. ● Implementing intel x86 architecture specific type inference algorithm ● Writing tests for everything 5 August-15 August: ● Cleaning the code. ● Fixing ​Coverity Scan​errors. ● Adding missing tests. ● Responding to ​issues​related to my code. 15 August-20 August: ● OPTIONAL:​Creating windows types and functions pre-compiled (into SDB) headers. ● OPTIONAL:​Creating POSIX compatible OS types and functions precompiled header. Micro-Tasks solved: I have made bunch of commits to the codebase ​Radare2 and ​Radare2-regressions​. My goal was to demonstrate both coding speed / ability to adopt & work with unknown code base within short time. All my commits are referenced ​here​and ​here​most notable are : ● Adding initial support for pic18c disassembler ● pic18c analysis plugin (coloring) ● enhancing the jump instruction family ● adding tests for pic GSoC experience: This is my first time to apply at Google summer of code. Last year I wanted to apply but I didn’t because I thought I was not prepared enough. This year I applied only for this one task. The reason is that their is no any other project that is Reverse engineering and code analysis based.