[解決済み] この難読化されたC言語コードはmain()なしで実行されると主張しているが、実際には何をするのか?
2023-06-29 19:31:25
疑問点
#include <stdio.h>
#define decode(s,t,u,m,p,e,d) m##s##u##t
#define begin decode(a,n,i,m,a,t,e)
int begin()
{
printf("Ha HA see how it is?? ");
}
これは間接的に
main
をどのように呼び出すのですか?
どのように解決するのですか?
C言語では、実行環境を2つに分類しています。
自立型
と
主催の
. どちらの実行環境でも、プログラム起動のための関数が環境から呼び出されます。
において
自立型
環境では、プログラム起動関数を実装することができます。
ホスト型
環境では
main
. C言語のプログラムは、定義された環境でのプログラム起動機能なしには実行できません。
あなたの場合
main
はプリプロセッサの定義で隠されています。
begin()
に展開されます。
decode(a,n,i,m,a,t,e)
に展開され、さらに
main
.
int begin() -> int decode(a,n,i,m,a,t,e)() -> int m##a##i##n() -> int main()
decode(s,t,u,m,p,e,d)
は 7 つのパラメータを持つパラメータ化されたマクロです。このマクロの置換リストは
m##s##u##t
.
m, s, u
そして
t
は4
th
, 1
st
, 3
rd
および2
nd
というパラメータが置換リストで使用されます。
s, t, u, m, p, e, d
1 2 3 4 5 6 7
残りは不要(
を難読化するだけ
). に渡される引数は
decode
は " です。
a
,
n
,
i
,
m
,a,t,e" というわけで、識別子の
m, s, u
と
t
は引数に置き換えられます
m, a, i
と
n
のように、それぞれ
m --> m
s --> a
u --> i
t --> n
関連
-
[解決済み] C++とCの融合 - #ifdef __cplusplus はどのように機能するのか?
-
未定義の `__isoc99_sscanf' への参照
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] ++iとi++の違いは何ですか?
-
[解決済み] mallocとcallocの違い?
-
[解決済み] CとC++でmain()は何を返すべきですか?
-
[解決済み] C言語でランダムなint型を生成するには?
-
[解決済み] printfは、フォーマット文字列の中に改行がないと、呼び出し後にフラッシュしないのはなぜですか?
-
[解決済み] なぜalloca()の使用はグッドプラクティスとみなされないのでしょうか?
-
[解決済み] このコードでインドの地図はどのように生成されるのでしょうか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
error: '.' トークンの前にunqualified-idを指定する必要があります。
-
g++が内部・外部コマンドソリューションとして認識されない、MinGWを初めて使うときの落とし穴
-
C - 添え字の値が配列でもポインタでもベクトルでもないエラー
-
コンパイルエラー:可変長オブジェクトが初期化されていない可能性があります。
-
警告: 'struct XXX' はパラメータリストの内部で宣言されています。
-
[解決済み] C言語では「?」演算子は何をするのですか?
-
[解決済み] longをフォーマットするprintfの引数は何ですか?
-
[解決済み] printfにおけるdoubleの正しい書式指定子
-
[解決済み] C言語標準に準拠した構造体の初期化方法
-
[解決済み] C言語の構造体(CGRectやCGPointなど)をNSLog化することは可能ですか?