and 与操作 , 取 esp 的低 16 1616 位 , 然后与操作的结果 减去 10h ;
and esp, 0FFFFFFF0h sub esp, 10h
$+5 的含义是当前指令 + 5 , 即执行下一条指令 , 每个指令的长度是 5 55 字节 ; 该指令可能是为了兼容 arm 代码而生成的 ; 调用 call 指令后 , 会将下一条要执行的指令放到栈中 ;
call $+5
该行指令对应的机器码如下 :
上面 call 调用后 , 会将下一条要执行的指令地址放到栈中 ;
这里使用 pop 将指令地址从栈中取出 , 放到 ebx 中 ;
从栈中取到的值实际上是 EIP , 当前位置 ;
pop ebx
将当前的地址 加上 0C75E7h 值 , 最终加法运算的结果作为传入下一个函数 __bionic_atfork_run_prepare 的参数 ;
add ebx, 0C75E7h