コグノスケ


link 未来から過去へ表示(*)  link 過去から未来へ表示

link もっと前
2020年7月3日 >>> 2020年6月20日
link もっと後

2020年7月3日

C言語でSEGV

目次: C言語とlibc
目次: ベンチマーク

SEGVを出すのがTwitterで流行しているみたいなので、少し考えてみました。Twitterで見かけたのは、*a;main(){*a=0;}(16文字)です。最適化オプションにもよりますが、異常なアドレスへのmovか、未定義命令ud2が出力されてSEGVします。

16文字でSEGV
$ echo -n '*a;main(){*a=0;}' > a.c && gcc a.c

a.c:1:1: warning: data definition has no type or storage class
    1 | *a;main(){*a=0;}
      | ^
a.c:1:2: warning: type defaults to 'int' in declaration of 'a' [-Wimplicit-int]
    1 | *a;main(){*a=0;}
      |  ^
a.c:1:4: warning: return type defaults to 'int' [-Wimplicit-int]
    1 | *a;main(){*a=0;}
      |    ^~~~

$ ./a.out

Segmentation fault

ただSEGVするだけで良ければ、mainのアドレスを .textではないアドレスにすれば良いので、main;(5文字)でも、達成できます。

5文字でSEGV
$ echo -n 'main;' > a.c && gcc a.c

a.c:1:1: warning: data definition has no type or storage class
    1 | main;
      | ^~~~
a.c:1:1: warning: type defaults to 'int' in declaration of 'main' [-Wimplicit-int]

$ ./a.out

Segmentation fault

この例はmainを関数ではなく変数として定義し、mainをbssセクションに配置します。最近のLinuxならばデータが置かれているセグメントは実行禁止にするはずなので、mainが指すデータが何であろうと、ジャンプした瞬間にSEGV します。

趣旨とは外れますがSEGVを避けて正常終了させたければ、

SEGVしたくない場合
$ echo -n 'main=0xc3;' > a.c && gcc -z execstack a.c

a.c:1:1: warning: data definition has no type or storage class
    1 | main=0xc3;
      | ^~~~
a.c:1:1: warning: type defaults to 'int' in declaration of 'main' [-Wimplicit-int]

$ ./a.out

(SEGVしない)

変数mainが指す位置にretq命令(0xc3)を置いて、-z execstackオプションでデータ領域を実行可能にしています。attributeで .text領域に置いても実行できますが、そんなことするくらいならmain() 関数を書いた方が短いです。

これが最短か?

変化球を使ってよければ0文字でSEGVできます。nostdlibオプションを使います。

0文字でSEGV
$ echo -n > a.c && gcc -nostdlib a.c

/usr/bin/ld: warning: cannot find entry symbol _start; defaulting to 0000000000001000

$ ./a.out

Segmentation fault

GNU ld(他のリンカーでも同じだと思いますけど)はELFのエントリアドレスに _startというシンボルのアドレスを使います。通常はcrt.oなど、リンク時に自動的に追加されるオブジェクトが _startを定義しますが、nostdlibオプションによりcrt.oがリンクされなくなって、_startは未定義になります。

するとldは _startを適当なアドレスに設定(上記の例では0x1000に)します。当然 _startが指すアドレスにコードはありませんから、実行するとクラッシュします。

編集者:すずき(2023/09/24 13:01)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2020年7月2日

Steamの秘密の実績を暴く方法

目次: ゲーム

Steamの買い物カートの中身一覧を見る方法を探していたんですが、全くわかりませんでした。だいぶ彷徨いましたが、未だトップ画面からカートを見る方法はわからないままです。Steamは本当にUIがひどい。Amazonを見習ってくれ……。

その際に副産物として、秘密の実績を確認する方法を見つけたのでメモしておきます。

  • Steamのウインドウ
  • ユーザー名のタブ
  • プロフィール
  • 最近プレイした全てのゲーム
  • すべてのゲーム

と辿ると自分が所持しているゲームの一覧が出ますから、実績を見たいゲームの

  • データを表示
  • グローバル実績

と辿ると全ての実績が表示されます。


個人のプレイデータでは秘密の実績と表示される


グローバルプレイデータでは秘密の実績も全て表示される

秘密の実績の意味とは一体……??

編集者:すずき(2023/09/24 13:10)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2020年7月1日

STATIONflowランク100

目次: ゲーム

STATIONflowのランクが100になりました。何か実績と紐づいているかなと思いましたが、特に何も起きませんでした。しょんぼり。


ランク100

普通のマップだと重いし、時間も掛かりすぎてやってられないので、専用の軽量マップを作ってひたすら待ちました。それでも相当時間が掛かります。普通に遊ぶ分にはランク50で十分ですね。

わかったこと

STATIONflowでランク100にする途中でいくつかわかったことがありました。

集客レベル
途中で出入口と乗り場の集客レベルがカンストし、変化もやることもなくなります。実績解除に必要なランク50以降はほぼ無意味です。
集客レベルの上がる余地は最大132(※)なので、ランク100まで上がり続けるかと思いきや、ランク1上がるごとに集客レベルが2〜4くらい上がるので、だいたいランク60くらいでカンストします。
評価収入
ランクとは無関係で、出入口と乗り場の集客レベルの合計に依存するようです。出入口と乗り場を最大数作り、集客レベルを全て最大にして、ランクA+ を取ったときが540,000 でした。おそらくこれが最大値です。

ランク100まで行ってもまだ取れない実績が残っていて(ラッキーセブン、トウキョウ)、なかなか気が遠くなるゲームです。

(※)出入口が6 x 9 = 54、乗り場が6 x 2 = 12、集客レベルは2段階上がるため (54 + 12) x 2 = 132です。

実績のtypo

STATIONflowの実績にtypoがありました。


8000?九千?

漢字だけ間違ってます。惜しい……!

編集者:すずき(2024/06/03 23:59)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2020年6月30日

STATIONflowの駅の評価

目次: ゲーム

以前(2020年5月28日の日記参照)STATIONflowで速度3にすると駅の評価が下がることをお伝えしましたが、若干間違っていて「画面の処理落ちで評価が下がる」方が実態に近そうです。

速度2でA+ 評価の駅を使って実験したところ、ノートPCのクロック周波数を低くするだけで、駅の評価がAに下がりました。

駅の評価と見せかけて、実はマシンの評価も入ってるんでしょうか?余計なお世話なので、勘弁してくれよ。

編集者:すずき(2024/06/03 23:59)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2020年6月29日

ノートPCの発熱を抑える方法 - その1

目次: Windows

その2はこちら。

ノートPCでゲームをしていると、筐体が焼けそうなほど熱くなり、キーボードまで熱くなってキーを打つのが辛いです。

発熱の原因はグラフィックスチップですが、どうもCPUも無罪ではないらしく、TurboBoostを無効にするとややマシになることがわかりました。

私のマシンでは「電源オプション」 - 「プロセッサの電源管理」 - 「最大のプロセッサの状態」にて、87%以下にするとTurboBoostがOFFになりました。


最大のプロセッサの状態を87%に設定

下記は87%設定(1.49GHz)と88%設定(3.38GHz)にしたときのCPU動作周波数の変化です。


87%に設定したときのCPU動作周波数は1.49GHz


88%に設定したときのCPU動作周波数は3.38GHz

当然ながら1.49GHzと3.38GHzでは性能に天と地ほどの差があって、1.49GHzだとSTATIONflowの画面はめちゃくちゃカクつきます。

しかしシミュレーションゲームでは、待っているだけの時もありますし、常に爆熱で動いてくれる必要はありません。TurboBoostを任意にOFFにできるのは非常に便利です。

設定と動作周波数の関係一覧

CPUのクロック周波数の上限は何段階かあるようなので、変化点を調べました。

  • 〜60%: 0.99GHz
  • 〜65%: 1.10GHz
  • 〜71%: 1.19GHz
  • 〜76%: 1.30GHz
  • 〜82%: 1.39GHz
  • 〜87%: 1.49GHz
  • 〜100%: 3.36GHz

こんな感じでした。Core i5-8250Uはベース周波数1.6GHz、ブースト周波数3.4GHzなのにベース周波数である1.6GHzに張り付く設定は存在しません。謎です。

タスクマネージャーに「基本速度1.8GHz」と表示されているのも謎です。どこから1.8GHz出てきた……??

編集者:すずき(2023/09/24 12:41)

コメント一覧

  • hdkさん(2020/06/30 23:55)
    Athlon 5350 (2.05GHz) をUEFI Setupで上限1.1GHzに設定して使っているのですが、基本速度のところにはちゃんと1.10 GHzと出ています。1.80 GHzとは...
  • すずきさん(2020/07/01 11:18)
    うちのマシンは基本速度が取得できてないんですかねえ?BIOS は 1.6GHz とおっしゃっているんですが。
    仮に Windows が言ってる 1.8GHz が正解だとしても、1.8GHz に張り付く設定もないので、やっぱり謎は残ります。
  • s16223さん(2023/08/08 23:06)
    うちの8250Uもベースクロックが1.8GHzになってますね、、、 いい情報ありがとうございます。
  • すずきさん(2023/08/10 00:51)
    何の数字なのか結局よくわからなかったですが、ご参考になれば幸いです。
open/close この記事にコメントする



2020年6月28日

STATIONflowまさかの実績解除方法

目次: ゲーム

STATIONflowのしょうもない小技 その2です。

実績の解除が非常に難しい「エレベスト」や「効率の鬼」のような難しい実績が、超簡単に取れる方法です。

例えば、エレベストの条件は「駅ランク20以上で階段とエスカレーターを設置せずにA+ 評価」です。前回(2020年6月27日の日記参照)お伝えした通り、エレベーターと通勤客の変な挙動が合わさって、まともにやるとかなり難しいです。

しかしSTATIONflowの実績判定は甘々で「00:00になった瞬間」しか見ません。従って、

  • ランク20、A+ 評価の駅を作る(階段、エスカレーター使用可)
  • 23:50になったら時間を止める
  • 階段、エスカレーターなど、実績取得の妨げとなるものを全て破壊する
  • 時間を再始動させ00:00を迎える

これだけで達成できます。正直、こんな低レベルな小細工が通じると思わなかったので、逆にびっくりしました……。

類似した実績「階段抜き」「ノンエスカレーター」「エレベスト」「効率の鬼」ならば同じ手が通用するはずです。

作成者の想定とは違うだろうという意味で「邪道」な感じはしますが、バグを突いた挙動でもなさそうだし、早解きしたい方は利用してみても良いでしょう。

編集者:すずき(2024/06/03 23:59)

コメント一覧

  • 匿名さん(2020/07/11 18:26)
    「階段抜き」「ノンエスカレーター」「効率の鬼」を除いて通常プレイで実績解除したのですが、こんな方法があったとは・・・検索からたどり着いたのですが眼から鱗でした。ありがとうございました。
  • すずきさん(2020/07/12 00:53)
    コメントありがとうございます。私もやってみてびっくりしました。何でも試してみるものですね……。
open/close この記事にコメントする



2020年6月27日

STATIONflowプレイ日記

目次: ゲーム

STATIONflowの基本は理解したつもりなので、実績解除に挑んでますが、難しくて取れないものがいくつかあります。

今のところ一番難しいと思うのは「エレベスト」です。条件は「駅ランク20以上で階段とエスカレーターを設置せずにA+ 評価」です。

ありがちな条件ですが、STATIONflowのエレベーターはとてもヘボいため達成は困難です。

輸送力が低い
特に電車乗り場が顕著で8基設置しても客を捌ききれません。
輸送距離に応じて待ち時間が長くなる
長距離(例えばB1〜B5など)輸送すると、やたら待たされます。
客が待ち行列から離脱する
階段ユーザー(通勤客、学生)は非常に短気で、すぐに離脱します。

一番問題なのは3つ目の条件です。通常、待ち行列から離脱した客は階段やエスカレーターを利用しますが、移動手段がエレベーターしかない場合、不可解な動きをします。

  • エレベーターに並ぶ
  • エレベーターがこない
  • 待ち行列から外れる
  • 他の移動手段を探すが見つからない(※)
  • またエレベーターに並ぶ
  • エレベーターがこない
  • (以降、繰り返し)

(※)彷徨っている間はエレベーターが到着しても乗りません。一番訳が分からない動きです。しかもこの彷徨う時間が長い。

このようなおかしな行動をし続けた挙句、勝手に怒り始めて、駅の評価を下げてきます。理不尽極まりないですね。


エレベーターが来てるのに乗らない&怒ってる様子

ランク20到達後も駅と人が増え続けるため、どんどん客が捌ききれなくなり条件が悪くなる一方ですから、「エレベスト」実績を達成する最大のチャンスは「ランク20になる瞬間」でしょう。

が、私の腕では評価Aが限界でした。

もっと頑張ればできるのかもしれないですが、何回も同じマップをランク20までやり直すのは時間掛かって辛いし面白くないのでもうやりません……。

編集者:すずき(2024/06/03 23:59)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2020年6月26日

STATIONflow小技

目次: ゲーム

STATIONflowのしょうもない小技。

将来的に、どこに駅の入り口と電車の乗り場が出てくるか?を見たい場合は「マップ作成」で見たいマップを「複製」「マップ編集」すれば、全ての入り口、乗り場を見ることができます。


マップ作成メニュー画面

STATIONflowの面白さは、どこに増設されるかわからない入り口や乗り場に対応することではあるのですが、記録を狙ったりするときや、事前に完璧な駅建築計画を立てたい人は、覗いてみると役立つかもしれません。

編集者:すずき(2024/06/03 23:58)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2020年6月22日

LinuxデバイスツリーのYAMLドキュメントチェッカー

目次: Linux

最近、というほどでもないのですが、Linux KernelのデバイスツリーのドキュメントはYAMLで書く方が主流らしいです。

ドキュメントの書き方が良くわからず、合っているのか間違っているのかわからなくて困っていたんですが、ドキュメント Writing DeviceTree Bindings in json-schema を見ていたところ、YAMLチェッカーの存在を知りました。

DeviceTree Bindings (json-schema版) のチェック
$ make dt_binding_check DT_SCHEMA_FILES=Documentation/devicetree/bindings/xxxx.yaml

こんな感じで使います。DT_SCHEMA_FILESを指定せずに実行すると全てのYAMLをチェックしようとしますが、16並列でもかなり時間が掛かりますから、自分が変更したファイルだけチェックしたほうが効率的でしょうね。

編集者:すずき(2024/02/27 02:26)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2020年6月20日

睡眠時無呼吸症候群とCPAP

半年くらい前からSAS(睡眠時無呼吸症候群)の対症療法としてCPAP(経鼻的持続陽圧呼吸器)を使っています。しかし、こいつがどうも息苦しくて合ってない気がしてなりません。

呼吸が止まるとSpO2(血中酸素飽和度)が下がります。医療機器以外でSpO2を測る手段はありませんから、先日、思い切ってメモリ機能付きのパルスオキシメーター(=SpO2計測器)Ubi-x LUKLA 2800mを購入しました。お値段6万円です。さすが医療機器、高いなー。


SpO2の変化、CPAPあり

添付のグラフはSpO2(青、左目盛り)と、脈拍(オレンジ、右目盛り)です。正常時のSpO2は98〜99%ですが、深夜4時3分に突如88%まで下がっています。

SpO2 88%がどれほど危険なのかわからなかったので、わざと息を止めてSpO2を下げる実験をしたところ「酸欠で目がチカチカして暗くなってきて、このまま死ぬんじゃねー?」と思うくらいでやっとSpO2 92%でした。88%とは一体……??

CPAPなし

CPAPなしだとどうなるかも測りました。CPAPありのときよりも頻繁にSpO2が低下しています。


SpO2の変化、CPAPなし

寝苦しくて辛いけどCPAPには意味があるということなんでしょうかねえ?

まだ1度ずつしか測っていないので、CPAPの効力については何とも言えません。今後CPAPあり・なし、仰向き、横向きなど条件を変えて何度か測ってみようと思います。

メモ: 技術系の話はFacebookから転記しておくことにした。大幅に追記。

編集者:すずき(2020/06/21 16:52)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link もっと前
2020年7月3日 >>> 2020年6月20日
link もっと後

管理用メニュー

link 記事を新規作成

<2020>
<<<07>>>
---1234
567891011
12131415161718
19202122232425
262728293031-

最近のコメント5件

  • link 21年9月20日
    すずきさん (11/19 01:04)
    「It was my pleasure.」
  • link 21年9月20日
    whtさん (11/17 23:41)
    「This blog solves my ...」
  • link 24年10月1日
    すずきさん (10/06 03:41)
    「xrdpで十分動作しているので、Wayl...」
  • link 24年10月1日
    hdkさん (10/03 19:05)
    「GNOMEをお使いでしたら今はWayla...」
  • link 24年10月1日
    すずきさん (10/03 10:12)
    「私は逆にVNCサーバーに繋ぐ使い方をした...」

最近の記事3件

  • link 23年4月10日
    すずき (11/15 23:48)
    「[Linux - まとめリンク] 目次: Linux関係の深いまとめリンク。目次: RISC-V目次: ROCK64/ROCK...」
  • link 24年11月6日
    すずき (11/15 23:47)
    「[Ubuntu 24.04 LTS on ThinkPad X1 Carbon Gen 12] 目次: Linux会社ではTh...」
  • link 24年11月11日
    すずき (11/15 23:26)
    「[Pythonのテストフレームワーク] 目次: Python最近Pythonを触ることが増えたのでテストについて調べようと思い...」
link もっとみる

こんてんつ

open/close wiki
open/close Linux JM
open/close Java API

過去の日記

open/close 2002年
open/close 2003年
open/close 2004年
open/close 2005年
open/close 2006年
open/close 2007年
open/close 2008年
open/close 2009年
open/close 2010年
open/close 2011年
open/close 2012年
open/close 2013年
open/close 2014年
open/close 2015年
open/close 2016年
open/close 2017年
open/close 2018年
open/close 2019年
open/close 2020年
open/close 2021年
open/close 2022年
open/close 2023年
open/close 2024年
open/close 過去日記について

その他の情報

open/close アクセス統計
open/close サーバ一覧
open/close サイトの情報

合計:  counter total
本日:  counter today

link About www.katsuster.net
RDFファイル RSS 1.0

最終更新: 11/19 01:04