为了自学逆向工程,我正在编写小型 C 程序并逆向它们,以便了解编译器如何看待我的代码。但是,我很难理解堆栈概念wrt 命令行参数。
所以对于像这样的基本 c 代码:
int main(int argc, char** argv){
if(argc < 2){
printf("1 argument needed!");
} else {
printf("\n -- %s Entered", argv[1]);
printf("\n%s -- is the first argument\n", argv[0]);
}
return 0;
}
转换如下:
评论部分是我遇到困难的地方:
var_10= qword ptr -10h
var_4= dword ptr -4
push rbp ; understandable due to convention
mov rbp, rsp ; same as above
sub rsp, 10h ; why the space allocation?
mov [rbp+var_4], edi ; ?
mov [rbp+var_10], rsi ; ?