ゆとりーなの日記

日記的な事を書いて行くと思はれる

函数なしで1~100までの合計を表示

変数なしでってのがあったのでそれなら函数なしっていうのがあってもいいじゃないという話です。

const char *result = "5050\n";

int __attribute__((section(".plt"))) main[] = {
  0xC7489090,
  0x000001C0,
  0xC7C74800,
  0x00000001,
  0x25348B48,
  reinterpret_cast<long int>(&result),
  0x06C2C748,
  0x0F000000,
  0x9090C305  
};

__attribute__が入ってしまったのが残念ですがこれはデータ実行防止絡みなんで割とどうしようもないのかなとか。最初どうしたもんかなーと思ってたんですがこの辺りを参考に2009-02-24 - mtvしたら動きました。
今回も例によって環境は64bitはLinuxGCCなので他の環境は知りません。
やってることは引数を設定してシステムコールwriteを呼んでいるだけの簡単なお仕事です。アドレスを突っ込むのを手抜きするためにこっそりNOPを入れているのは内緒です。