デジタルちんぶろぐ

デジタルな話題

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  268  : 記事  0  : コメント  4391  : トラックバック  79

ニュース


技術以外は
ちんぶろぐ

記事カテゴリ

書庫

日記カテゴリ

事の発端はuskzさんのtwitterでの発言

g++は変数であってもmainはマングリングされなくて、VCはされるみたい。

でも、VCだってextern “C”ならマングリングされない。だから、こんなことをしてみたら実行時エラーにもならなかった。

#include <iostream>

struct Hello {
       unsigned char code;
       explicit Hello(unsigned char c) : code(c) {
               std::cout << "Hello World!" << std::endl;
       }
};

extern "C" {
Hello   main(0xc3);
};

※VC9にてコンパイル&実行。

VCの環境において、struct Helloはunsigned char=1byteのcodeメンバを持つのみ

Hello型変数mainのコンストラクタに0xc3を渡してcodeを0xc3(x86のRET命令)にしてやれば、スタートアップコードが_mainを呼び出してもそのまま帰るかな?と思ったら、予想通り正常に終了した。

Ubuntu 10.04とg++だと実行時にSegmentation Fault起こした。データ領域にコードを置いたからかな?

投稿日時 : 2010年5月25日 0:54

コメント

# thanks for the postmishertAtroro 2010/11/09 2:20 auto mechanic
Do you people have a facebook fan page? I looked for one on twitter but could not discover one, I would really like to become a fan!

# jusvpyynnwRNMmbgM 2011/09/29 6:55 http://oemfinder.com
X6XvVb Left on my site a link to this post. I think many people will be interested in it..!

# 私はそのような意味のあるブログの記事に感謝したいと思う 2011/12/13 11:10 lowes coupon
そのような意味のあるブログの記事のためにあなたのウェブマスターに感謝。私は、上のビューに感銘を受けて call _main.

Post Feedback

タイトル
名前
Url:
コメント: