[erlang-questions] Understanding BEAM bytecode [Code section]

Dmytro Lytovchenko <>
Fri Sep 15 10:24:58 CEST 2017


Similar to bif0...bif3 gc_bifN uses import index from the import table.
Import table contains triples {Mod, Fun, Arity} for external functions used
in the current module:

http://beam-wisdoms.clau.se/en/latest/indepth-beam-instructions.html#bif1-11-bif2-152-bif3

So Bif=00 is the 0th index in the import table.

http://beam-wisdoms.clau.se/en/latest/indepth-beam-file.html#impt-imports-table

2017-09-14 23:16 GMT+02:00 Gabriel Rivas <>:

> Hello all,
>
> I am trying to understand BEAM files most specifically the Code section.
> For that objective I wrote a simple program consisting of just a
> subtraction function
> taking 2 parameters:
>
> -module(ex3).
> -export([sub/2]).
>
> sub(X,Y) ->
>     X-Y.
>
> From that file I created the .S version,  and I can see that the assembly
> version for the subtraction is:
>
> {gc_bif,'-',{f,0},2,[{x,0},{x,1}],{x,0}}.
>     return.
>
> In the BEAM file I can see that the bytecode part that correlated with this
> function is (in hex numbers):
>
> 7D 05 20 00 03 13 03 13
>
> After some reading of the BEAM book and some analysis, I could translate
> these hex numbers to:
>
> 7D 05 20 = {gc_bif2,
>                     Lbl = 05,
>                     Live X registers = 2,
>                     Bif = 00,
>
> 03 13 03 13 =  args: X0,X1
>                         return: X0
>                         13 -> k_return
>
> But I still don't see how the subtraction happens. Can anybody shed some
> light
> on the internals of calling a BIF in the erlang module?
>
> Regards,
> Gabriel
>
> _______________________________________________
> erlang-questions mailing list
> 
> http://erlang.org/mailman/listinfo/erlang-questions
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20170915/741912aa/attachment.html>


More information about the erlang-questions mailing list