# Quick primer

Let's start with a very short and simple function:

![](https://1187734245-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBvvTRYOmg1A3xcvtPL0T%2Fuploads%2Fgit-blob-3c1c09ba3cd492970f3e948169f4af52adf15fd3%2Fprimer1.gif?alt=media)

We decompile it with **View, Open subviews, Pseudocode** (hotkey **F5**):

![](https://1187734245-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBvvTRYOmg1A3xcvtPL0T%2Fuploads%2Fgit-blob-d5e8ee421681d59cc170139e2a6d5d40eee927b1%2Fprimer2.gif?alt=media)

While the generated C code makes sense, it is not pretty. There are many cast operations cluttering the text. The reason is that the decompiler does not perform the type recovery yet. Apparently, the **a1** argument points to a structure but the decompiler missed it. Let us add some type information to the database and see what happens. For that we will open the **Structure** window (**Shift-F9**) and add a new structure type:

![](https://1187734245-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBvvTRYOmg1A3xcvtPL0T%2Fuploads%2Fgit-blob-52bf38fba12ebec1a5a5340b9e3283471e200f09%2Fprimer3.gif?alt=media)

After that, we switch back to the pseudocode window and specify the type of **a1**. We can do it by positioning the cursor on any occurrence of **a1** and pressing **Y**:

![](https://1187734245-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBvvTRYOmg1A3xcvtPL0T%2Fuploads%2Fgit-blob-b8d2beff2815a81c30572a19287f31626de8b474%2Fprimer4.gif?alt=media)

When we press **Enter**, the decompilation output becomes much better:

![](https://1187734245-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBvvTRYOmg1A3xcvtPL0T%2Fuploads%2Fgit-blob-f07589cae0c84695def1a270ee3d792d66b9d932%2Fprimer5.gif?alt=media)

But there is some room for improvement. We could rename the structure fields and specify their types. For example, **field\_6B1** seems to be used as a counter and **field\_6B5** is obviously a function pointer. We can do all this without switching windows now. [Only the initial structure definition required the **Structure** window](#user-content-fn-1)[^1]. Here is how we specify the type of the function pointer field:

![](https://1187734245-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBvvTRYOmg1A3xcvtPL0T%2Fuploads%2Fgit-blob-a64e43aa77550b65241cc75fdc358588c8d1689e%2Fprimer6.gif?alt=media)

The final result looks like this:

![](https://1187734245-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBvvTRYOmg1A3xcvtPL0T%2Fuploads%2Fgit-blob-b4fc765cff21af9dc0c449bc79807cebaba8ae03%2Fprimer7.gif?alt=media)

Please note that there are no cast operations in the text and overall it looks much better than the initial version.

[^1]: This is not completely true. In fact, we could enter the full structure definition in the type dialog box, but it is difficult because the input field consists of a single line. We could also define new types with the **File, Load file, Parse C header file** command.
