仕事の8週目で2019-2020-1 20199322「Linuxカーネルの原理と分析」

今週は、実行可能ファイルの主要な原則であります

ELF(実行とリンク可能なフォーマット)

コンパイラ(コンパイル)

動作を説明するための例

前処理:gccを-E fuck.c -o fuck.i -m32
コンパイラ:gccの-S fuck.i -o fuck.s -m32
コンパイル:gccの-c fuck.s -o fuck.o -m32
デフォルトのアダプタ(ダイナミックライブラリー):gccのfuck.o -oファック-m32
収束静的ライブラリ:gccのfuck.o -o fuck.static -m32 -static

コア、GDBデバッガ、ブレークポイントを設定し、凍結変更メニューコンテンツフロントは、これが一般的である、とするものは何もありません。




分析

execveは、より特定のあるシステムコール
を説明するための例と関連して

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
char *newargv[] = { NULL, "hello", "world", NULL };
char *newenviron[] = { NULL };
if (argc != 2) 
{
fprintf(stderr, "Usage: %s <file-to-exec>\n", argv[0]);
exit(EXIT_FAILURE);
}
newargv[0] = argv[1];
execve(argv[1], newargv, newenviron);
perror("execve");   /* execve() returns only on error */
exit(EXIT_FAILURE);
}

別のセクション

#include <stdio.h>
#include <stdlib.h>
 int main(int argc, char *argv[])
{
int j;
for (j = 0; j < argc; j++)
printf("argv[%d]: %s\n", j, argv[j]);
exit(EXIT_SUCCESS);
}

概要

コマンドライン引数と環境変数は、execveのにシェルを介して新しい初期化プロセスのスタックにコピーsys_execveに渡されたシステムを通過したexcve呼び出しパラメータ、最後sys_execveを渡されます。execve()システムコールは、プロセスを終了し、ユーザモード実行は、実行コンテキストが大幅に変更されたとき、それを再開するときに、実行される新しいプログラムは、プログラムのエントリポイントの先頭ELFから新しいプログラムを起動、プロセス空間にマッピングされています。
この新しいプログラムがある場合は、静的リンク、プログラムは独立して実行することができ、ELFこのエントリアドレスヘッダーは、このプログラムのエントリアドレスであり、この新しいプログラムである場合、動的リンク、そして必要が共有ライブラリをロードするために、ELFヘッダこれは、ダイナミックリンカldのエントリアドレスのエントリアドレスです。

おすすめ

転載: www.cnblogs.com/vizen/p/11820420.html