機械語なら俺に質問しろ!その2at TECH
機械語なら俺に質問しろ!その2 - 暇つぶし2ch24:デフォルトの名無しさん
12/12/31 16:14:58.73
>>20
手段はいくつもあるという話をしただけで、決めつけている文章には見えないんだけど。
どう書けばよかったか教えてくれる?

25:デフォルトの名無しさん
12/12/31 16:28:57.67
>>24
>手段はいくつもあるという話をしただけ

>>19に書かれてる手段というと

・char main[] = { ...
・デバッガで実行中にメモリを書き換え

↑の2つだけど、どっちもRAM上のコードを実行する話じゃないの?

26:デフォルトの名無しさん
12/12/31 18:42:50.82
>>24
本人ではないが、「決めつける」というのは「どのような系でも可能であると想定する」
ということでは。
実際これが駄目だと思われるOSの例を思いつくけども。
特に断りもなくさらっと書くなら汎用な方法を書くべきではないかと。

27:デフォルトの名無しさん
13/01/02 16:00:26.27
>>25
> ↑の2つだけど、どっちもRAM上のコードを実行する話じゃないの?
一つ目の例は ROM になるかどうかは実行環境次第でしょ。
そして、RAM だとすると 19, 24 がどう悪いの?
19, 24 に書いてないことで非難されても困るんだけど。

>>26
> 特に断りもなくさらっと書くなら汎用な方法を書くべきではないかと。
俺はそうは思わないけど、君が汎用的な方法を書くことを非難したりはしないからどうぞどうぞ。

俺は、あれでもこれでもいい、という言い方をしたつもりであって、
あれかこれでなければならない
という言い方をしたつもりはないんだよね。
沢山あるやり方の中から、毛色の違う二つを例示したつもりであって、網羅したつもりではない。
「網羅したつもりのように見える」という話であれば、 24 に書いたようにどう書けばよかったか教えてほしい。
「網羅すべきだ」というなら、すべきことをしなかったというのは認めるが、俺にはそんなつもりはないから、網羅したい誰かがやればいい。

28:デフォルトの名無しさん
13/01/02 16:12:33.07
>>27
>一つ目の例は ROM になるかどうかは実行環境次第でしょ。

const 付いてなきゃ RAM 以外ありえんのじゃないの?

29:デフォルトの名無しさん
13/01/02 16:15:56.61
>>27
>俺は、あれでもこれでもいい、という言い方をしたつもりであって、

狭い知識でしか語ってないから馬鹿にされてんだよいい加減気付け

30:デフォルトの名無しさん
13/01/02 17:33:55.52
おまえもな

31:デフォルトの名無しさん
13/01/03 11:12:59.82
機械語っていうから低レベル(技術のレイヤーの)なことにすごく詳しい人が
書き込んでるのかと思ったらそうでもないのか。
単に「数字の羅列でプログラムが書ける俺ってカッケー」みたいな感じ?

32:デフォルトの名無しさん
13/01/03 11:15:52.36
>>28
リンカスクリプトでもなんでも好きに書けばいいし、ROM に焼いてしまえば const つけなくても ROM だろう。
これも網羅したつもりはないからね。

>>29
俺は馬鹿にするなとは主張してないから、好きなだけ馬鹿にしたらいいし、君の広い知識も披露していくといいよ。

33:デフォルトの名無しさん
13/01/03 11:23:06.67
>>32
>リンカスクリプトでもなんでも好きに書けばいいし、ROM に焼いてしまえば const つけなくても ROM だろう。

char main[] なんてHEXファイルにも現れないもんどーやってROMに焼くの?
配列そのものと配列の初期値と勘違いしてないか?

34:デフォルトの名無しさん
13/01/03 11:53:39.47
>>33
どっからどこまで焼くべきかなんて自分で分かるんだから好きに焼けばいい。

> 配列そのものと配列の初期値と勘違いしてないか?
そんなん環境によると思うが、環境に合わせたコードを書けばいいだろう。
だいたい、俺はどこでも動くと言った覚えはないし、そもそも >20 に対して「決めつけてるつもりはない」という意味の
返信をしているんだから、スタートアップが _main にジャンプした場合にそこが必ず実行可能だと主張していない
と解釈してもらって当然じゃないかと思ってるから、そうではないというなら説明してもらいたい。
そして、配列の初期値をコピーした _main を実行したとしても、コピーの必要のないグローバル変数の _main を実行
したとしても、どちらとも矛盾する主張をここまでにしたつもりはないよ。

で、 char main[] = { ... の場合に、配列の初期値なんてものを作って、実行時にコピーする環境が実在するの?
作れば作れるんだから実在するのかも知れないけど。
これ、俺はグローバル変数のつもりだったんだけど、もしかして、ローカル変数ならばって話をしてる?だとしたら
下らないことにつき合わせてごめんね。

35:デフォルトの名無しさん
13/01/03 11:58:21.96
マシン同士の会話が始まっちゃったんで
どっちかが焼き切れるのを待とうや

36:デフォルトの名無しさん
13/01/03 12:07:40.19
>>34
>で、 char main[] = { ... の場合に、配列の初期値なんてものを作って、実行時にコピーする環境が実在するの?

ROM化前提ならそれが普通。

37:デフォルトの名無しさん
13/01/03 12:14:04.96
>>34
>で、 char main[] = { ... の場合に、配列の初期値なんてものを作って、実行時にコピーする環境が実在するの?

ローダーがRAM上にプログラム読み込んで実行する環境しか知らんみたいね。

38:デフォルトの名無しさん
13/01/03 14:27:54.77
実家から戻ってきてみたら、まだやってたぜこれ

そんなことよりおまえらことよろな

39:デフォルトの名無しさん
13/01/04 04:05:14.23
ん、今年も宜しく。

40:デフォルトの名無しさん
13/01/04 05:01:31.35
LSIC-85 で、stpcpy見つけてうまくいったから、RX200で使おうとしたら、無かった。
LSIC.man 見たら、MS/DOSでしか使えないって書いてあった(w

41:デフォルトの名無しさん
13/01/04 05:27:58.05
>LSIC-85 で、

新製品?

42:デフォルトの名無しさん
13/01/04 05:44:46.63
>>40
glibcやnewlibにもあるしそんな珍しいもんでもないと思うが。
URLリンク(www.gnu.org)
URLリンク(sourceware.org)

43:デフォルトの名無しさん
13/01/04 05:47:13.65
URLリンク(pubs.opengroup.org)

44:デフォルトの名無しさん
13/01/04 15:33:17.32
>>34
char main[]のアドレスが実行可能かどうかもアレだけど、
そもそもこれってリンクの段階でリンカはシンボル名しか見てなくてそれが関数
なのか配列なのかはお構いなしってことだよね。
普通Cの処理系ってそういうものなんだっけ? 例えば配列だとリンクできないような
処理系はないのかな?

45:デフォルトの名無しさん
13/01/04 15:48:11.68
>>44
処理系に拠るんじゃないかな。
Cだと最初の初期化ルーチンで初期化を行った後にmain()を呼び出すけど、
リロケータブルオブジェクトには大抵セグメント情報が付いてて、コードセグメントに
配置された初期化ルーチンからデータセグメントのmain[]を呼び出せない
アーキテクチャは普通にあるから、それをリンカがエラーとするか、データセグメントに
配置されたmain[]のアドレスを単なる値としてリンクを成功させるかは処理系に
拠る筈。安全の面では前者が望ましいのは勿論。

46:デフォルトの名無しさん
13/01/04 18:44:29.48
>>36
いや、俺の普通は ROM から直接実行する環境。
>>37
逆じゃないの?

>>44
全ての処理系/実行環境で有効だと主張したつもりはないので、
説明不足だと言って非難するなら、そこは甘受しよう。

47:デフォルトの名無しさん
13/01/04 18:55:24.26
>>46
> >>37
> 逆じゃないの?

> で、 char main[] = { ... の場合に、配列の初期値なんてものを作って、実行時にコピーする環境が実在するの?

じゃあ君の普通の環境では、const 宣言もない main[] が ROM に配置されんの?

48:デフォルトの名無しさん
13/01/04 21:42:16.52
>>45
手持ちのMac OS Xでやってみたら、リンクはできました。char main[]は
データセグメントにある。
実行するとmainにジャンプした時点で死亡。実行属性が付いてないので。
mainが呼ばれる前に実行属性を付ける処理を呼ぶとmainを実行できたw

>>46
自分は基本PCのOSしか知らないんですが、元の話で暗黙のうちに想定している
環境は何ですか? やはりプラットフォーム依存性が高いかと。
組み込み系とか興味はあります。

というわけで話を膨らませてみたつもりw

49:デフォルトの名無しさん
13/01/05 08:39:35.88
クリックするだけで感染、みたいなのが多かった時期にソースを読んでると、
コード内にマシン語がデータとして居るのは、珍しくはない光景だったんだな
組み込みじゃないけど

50:デフォルトの名無しさん
13/01/05 15:10:12.18
>>41 ごめん、LSIC-80の8085用オプションで。

51:デフォルトの名無しさん
13/01/05 15:22:09.39
>>49
いわゆるトランポリンコードを実行するにはスタックとかヒープに実行属性が
付いてないとできないけど、今はセキュリティ上の問題になる。

でも古いコードだとそういうテクニックを使ってたりするのがあるから、互換性を
保つには闇雲に実行属性を落とせなかったり。
ユーザーの皆さん、古いアプリのサポートを打ち切るのは単に新しいバージョン
を買うように仕向けている訳じゃないんですよ、みたいなw

52:デフォルトの名無しさん
13/01/05 15:37:34.76
>>50
> LSIC-80の8085用オプション

8085って8080から拡張された入出力と割り込み機能をサポートする命令が2つ増えただけで
公式には8080と大して命令変わってないと思ったけど、LSI C-80って8085用の特別な機能
でもあんの?

53:デフォルトの名無しさん
13/01/06 06:05:16.68
アセンブリフェーズがNR80だから、正確には8080のコード吐くんですね。
SIMとRIMはニーモニックが認められないので、DC 20h/30h で書きます。
_LCC80ファイルの中身見直したら、-i8080 -RN で8085固有の指定はありませんでした。

54:デフォルトの名無しさん
13/01/06 19:45:24.08
非公開命令でも吐いたら面白いのになあ。仕事では使えんけど。
URLリンク(home.comcast.net)

55:デフォルトの名無しさん
13/01/07 06:41:05.63
私が自分用に作ったメモにもこのインストラクションは載ってました。
8080から改良するときに、ちょっと凝ったプログラミングをできるように
という思想が感じられますね。
このページ、活字が小さくて見づらい。だれかtextにしてくれないかな。

56:デフォルトの名無しさん
13/01/08 15:45:46.76
うーんわからない。とあるUNIX(x86_64)のプログラムだけど、

(gdb) i r
rax 0x00
rdi 0x800f5539034375816080
rip 0x800c7cff90x800c7cff9
(gdp) x/i 0x800c7cff9
0x800c7cff9 mov (%rdi),%rax
(gdb) x/xg 0x800f55390
0x800f55390 0x0000000800f5bf98
(gdb) stepi
(gdb) i r
rax 0x800f5bfcc34375843788
rdi 0x800f5539034375816080
rip 0x800c7cffc0x800c7cffc

なんでraxが0x800f5bf98にならずに0x800f5bfccになるの?
テストプログラムで
mov (%rdi),%rax
を実行させても正しく間接参照する。C2Dのバグ疑ってもいいかな。

57:デフォルトの名無しさん
13/01/08 16:01:03.11
あっとタブが飛んだ 再投稿

うーんわからない。とあるUNIX(x86_64)のプログラムだけど、

(gdb) i r
rax 0x00
rdi 0x800f55390 34375816080
rip 0x800c7cff9 0x800c7cff9
(gdp) x/i 0x800c7cff9
0x800c7cff9 mov (%rdi),%rax
(gdb) x/xg 0x800f55390
0x800f55390 0x0000000800f5bf98
(gdb) stepi
(gdb) i r
rax 0x800f5bfcc 34375843788
rdi 0x800f55390 34375816080
rip 0x800c7cffc 0x800c7cffc

なんでraxが0x800f5bf98にならずに0x800f5bfccになるの?
テストプログラムで
mov (%rdi),%rax
を実行させても正しく間接参照する。C2Dのバグ疑ってもいいかな。

58:デフォルトの名無しさん
13/01/08 16:11:02.74
>>57
なんで最後に

>(gdb) x/xg 0x800f55390

も一回やらんの?

59:デフォルトの名無しさん
13/01/08 16:17:03.34
変わってなかったのでコピペしませんでした。
(gdb) x/xg 0x800f55390
0x800f55390 0x0000000800f5bf98

60:デフォルトの名無しさん
13/01/08 16:18:59.10
念のために逆アセのバグも疑ってみない?

61:デフォルトの名無しさん
13/01/08 16:28:15.43
それも疑ってみてました。正しいようです
(gdb) x/3xb 0x800c7cff9
0x800c7cff9 0x48 0x8b 0x07

テストプログラム
(gdb) x/4i aaa
0x4006f0 <aaa>: mov %rdi,-0x8(%rsp)
0x4006f5 <aaa+5>: mov -0x8(%rsp),%rdi
0x4006fa <aaa+10>: mov (%rdi),%rax
0x4006fd <aaa+13>: retq
(gdb) x/3xb 0x4006fa
0x4006fa <aaa+10>: 0x48 0x8b 0x07

違うコンパイラでコンパイルしてみたらコンパイルが終了しない...

62:デフォルトの名無しさん
13/01/08 16:44:41.08
>>61
>違うコンパイラでコンパイルしてみたらコンパイルが終了しない...

C2Dのバグかも?w

63:デフォルトの名無しさん
13/01/08 17:06:08.41
プログラムで合成されたCソースで、コンパイラへの負荷がかなり高い部分があって、
cc1がCPU利用率100%に張り付いて終了しない。
スラッシング起こすほどのメモリは使ってないようだけど。小一時間放置してみる

64:デフォルトの名無しさん
13/01/08 17:10:58.31
理解できない現象を何でも自分以外のせいにするのは素人。

65:デフォルトの名無しさん
13/01/08 17:22:11.70
コンパイルの山場は通過した模様。
たかだが50000行くらいのソースのコンパイルに20分くらいかかった。

66:デフォルトの名無しさん
13/01/08 17:25:44.71
>>61
>違うコンパイラでコンパイルしてみたら

C2Dのバグ疑うかってのに、同じCPU違うコンパイラで偶々動いたとしてそれでいい訳?

67:デフォルトの名無しさん
13/01/08 17:38:49.14
行きつく先がC2Dかはわからないけど、動く条件と動かない条件絞っていかないと
原因にたどり着けないでしょ。

問題の個所は別の呼び出しでは問題なく通っているので、
原因がC2Dと仮定するとえれー複雑な条件が必須なはずでお手上げかもだけど。

実は「おめーがx64のアセンブラ知らねーのが原因、その命令は他のレジスタも
参照してる」とかいう罵声も期待してたけど、飛んでこないところをみるとそう
じゃなかったらしい。

ちなみにシングルスレッドなので別スレッドが書き換えてるもないです。(多分)

68:デフォルトの名無しさん
13/01/08 17:43:19.05
>>67
>ちなみにシングルスレッドなので別スレッドが書き換えてるもないです。(多分)

プロセッサのバグ疑うんならOSも疑うべきだろ

69:デフォルトの名無しさん
13/01/08 17:47:02.78
>>67
>行きつく先がC2Dかはわからないけど、動く条件と動かない条件絞っていかないと
>原因にたどり着けないでしょ。

別のコンパイラ試すってのは条件絞ってることにはならんよ。

70:デフォルトの名無しさん
13/01/08 18:00:40.95
やり方によってはなるよ。

71:デフォルトの名無しさん
13/01/08 18:05:39.70
ならないよ

72:デフォルトの名無しさん
13/01/08 18:10:49.10
別のコンパイラを試した → 動いた → 前のコンパイラが原因

とはならない。可能性のひとつとして考えられるというだけ。

前のコンパイラが原因の可能性のひとつであるということは別のコンパイラを試す前と変わらない。

73:デフォルトの名無しさん
13/01/08 18:22:00.06
コンパイラ変えてコンパイルしなおすだけだったら、そうだろうね。
やってる本人が出来るといってる方法でやってるんだからいいじゃん。

74:デフォルトの名無しさん
13/01/08 18:48:48.76
やってる方法がトンチンカンだから書いてるプログラムがクソであることは容易に想像がつく

75:デフォルトの名無しさん
13/01/08 19:03:04.86
自分が想像できない事に言いがかり付けない方がいいよ。

ゴミクズみたいのが絡んできたし、これ以上有益な情報得られない
だろうから退散します。
結果わかったら報告しに戻ってくるかも。

76:デフォルトの名無しさん
13/01/08 19:07:41.55
最後までクズでした

77:デフォルトの名無しさん
13/01/08 19:10:51.57
説明の責任は質問する側にあることが解ってないお子様なんだろう


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch