TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼
Perlについて
Ruby で GUI するスレ
【会津】パソコン甲子園2004【若松】
HTAをもっと流行らせる計画 Part2
Access VBA 質問スレ Part1
Visual Studio 2017 Part6
ATL/WTL Part7
PowerShell -Part 3
Excel VBA 質問スレ Part55
C言語相談室(上級者専用)

機械語なら俺に質問しろ!その2


1 :2012/12/29 〜 最終レス :2019/08/12
漏れは今までにC、C++、Pascal、HSP、JS、VBなど
数々の言語を極めてきたがやはり一番手にしっくりくる言語は機械語だ。
だから、機械語のことなら何でも質問しろ!
ただプログラムのコードなんかは長くなるがな。 あ、ASMの話でもいいよ。

2 :
STAX B

3 :
The previous thread is...
http://toro.2ch.sc/test/read.cgi/tech/1035288252/

4 :
糞スレ勃てんなボケが!

5 :
LSI C-80のランタイムかぁ。掛け算はアセンブラでがちに書いているだろうけど、
printf()系はCで書いたレベルだろうしなぁ。

6 :
この時代の組み込み用コンパイラのライブラリなんてサンプルプログラム感覚だろう。
ソースが付いてるのは好きに直せって意味だし。

7 :
関連スレ
アセンブラ
http://toro.2ch.sc/test/read.cgi/tech/1314512680/l50

8 :
ライフボート(笑)

9 :
板違いだろ
昔のPC板に行けよ

10 :
ARMかMIPSあたりの質問カモーン

11 :
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
                  京都大学霊長類研究所

12 :
バイナリエディタで Hello, world! と表示するプログラムを作った頃が懐かしい
今なら nop や適当なパディング詰めておく事で
アドレスを指定しやすくするなどの工夫が思いつくのだが

13 :
人造人間キカイダー

14 :
ピーガーピービョンビョン

15 :
ほんにょごにょん

16 :
>>5 fmtio.lというのがsprintfの実装でした。源流はunixですね。
素直なcで書かれてます。fmtio2.lというのがOS依存のprintf系実装。
1文字出力の関数だけが違って、フォーマッターの機能は共通に使えるように
うまく階層分けされていました。

17 :
いきなりsprintfとか行っちゃうの?
例えばUNIXだったらwrite(2)を叩くぐらいから始めるのでは。
ところで機械語と言ったらアセンブリじゃなくていきなりバイナリ打ち込み?
実行ファイルのフォーマットの理解とかからスタートなん?

18 :
組み込みなら、アドレスマッピングを意識するだけ。

19 :
>>17
いきなり打ち込みじゃないならアセンブラスレにでも行けばいい。
実行形式ファイルを丸々作る必要はなく、
char main[] = { ...
とかでもいいだろうし、デバッガで実行中にメモリを書き換えてもいいだろう。

20 :
>>19
>char main[] = { ...
>とかでもいいだろうし、デバッガで実行中にメモリを書き換えてもいいだろう。
RAM上のコードはプログラムとして実行できると決め付けてないか?

21 :
パーミッション?プリフェッチ?

22 :
石の好き好きだろう
データRAMはインストラクションフェッチ対象外、
と聞いたときは、カルチャーショックをうけたもんさ
NULLが0じゃない系があるときいたときもね(関連)

23 :
>>17,19
非組み込みであっても、平時はコンパイラ、アセンブラも活用するが、
デバッグ時や日常雑事でバイナリエディタでコード開いて、
ちょちょいっといじったりするのはマシン語のノウハウの領域

24 :
>>20
手段はいくつもあるという話をしただけで、決めつけている文章には見えないんだけど。
どう書けばよかったか教えてくれる?

25 :
>>24
>手段はいくつもあるという話をしただけ
>>19に書かれてる手段というと
・char main[] = { ...
・デバッガで実行中にメモリを書き換え
↑の2つだけど、どっちもRAM上のコードを実行する話じゃないの?

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

27 :
>>25
> ↑の2つだけど、どっちもRAM上のコードを実行する話じゃないの?
一つ目の例は ROM になるかどうかは実行環境次第でしょ。
そして、RAM だとすると 19, 24 がどう悪いの?
19, 24 に書いてないことで非難されても困るんだけど。
>>26
> 特に断りもなくさらっと書くなら汎用な方法を書くべきではないかと。
俺はそうは思わないけど、君が汎用的な方法を書くことを非難したりはしないからどうぞどうぞ。
俺は、あれでもこれでもいい、という言い方をしたつもりであって、
あれかこれでなければならない
という言い方をしたつもりはないんだよね。
沢山あるやり方の中から、毛色の違う二つを例示したつもりであって、網羅したつもりではない。
「網羅したつもりのように見える」という話であれば、 24 に書いたようにどう書けばよかったか教えてほしい。
「網羅すべきだ」というなら、すべきことをしなかったというのは認めるが、俺にはそんなつもりはないから、網羅したい誰かがやればいい。

28 :
>>27
>一つ目の例は ROM になるかどうかは実行環境次第でしょ。
const 付いてなきゃ RAM 以外ありえんのじゃないの?

29 :
>>27
>俺は、あれでもこれでもいい、という言い方をしたつもりであって、
狭い知識でしか語ってないから馬鹿にされてんだよいい加減気付け

30 :
おまえもな

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

32 :
>>28
リンカスクリプトでもなんでも好きに書けばいいし、ROM に焼いてしまえば const つけなくても ROM だろう。
これも網羅したつもりはないからね。
>>29
俺は馬鹿にするなとは主張してないから、好きなだけ馬鹿にしたらいいし、君の広い知識も披露していくといいよ。

33 :
>>32
>リンカスクリプトでもなんでも好きに書けばいいし、ROM に焼いてしまえば const つけなくても ROM だろう。
char main[] なんてHEXファイルにも現れないもんどーやってROMに焼くの?
配列そのものと配列の初期値と勘違いしてないか?

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

35 :
マシン同士の会話が始まっちゃったんで
どっちかが焼き切れるのを待とうや

36 :
>>34
>で、 char main[] = { ... の場合に、配列の初期値なんてものを作って、実行時にコピーする環境が実在するの?
ROM化前提ならそれが普通。

37 :
>>34
>で、 char main[] = { ... の場合に、配列の初期値なんてものを作って、実行時にコピーする環境が実在するの?
ローダーがRAM上にプログラム読み込んで実行する環境しか知らんみたいね。

38 :
実家から戻ってきてみたら、まだやってたぜこれ
そんなことよりおまえらことよろな

39 :
ん、今年も宜しく。

40 :
LSIC-85 で、stpcpy見つけてうまくいったから、RX200で使おうとしたら、無かった。
LSIC.man 見たら、MS/DOSでしか使えないって書いてあった(w

41 :
>LSIC-85 で、
新製品?

42 :
>>40
glibcやnewlibにもあるしそんな珍しいもんでもないと思うが。
http://www.gnu.org/software/libc/manual/html_node/Copying-and-Concatenation.html#index-stpcpy-502
http://sourceware.org/newlib/libc.html#stpcpy

43 :
http://pubs.opengroup.org/onlinepubs/9699919799/functions/stpcpy.html

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

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

46 :
>>36
いや、俺の普通は ROM から直接実行する環境。
>>37
逆じゃないの?
>>44
全ての処理系/実行環境で有効だと主張したつもりはないので、
説明不足だと言って非難するなら、そこは甘受しよう。

47 :
>>46
> >>37
> 逆じゃないの?
> で、 char main[] = { ... の場合に、配列の初期値なんてものを作って、実行時にコピーする環境が実在するの?
じゃあ君の普通の環境では、const 宣言もない main[] が ROM に配置されんの?

48 :
>>45
手持ちのMac OS Xでやってみたら、リンクはできました。char main[]は
データセグメントにある。
実行するとmainにジャンプした時点で死亡。実行属性が付いてないので。
mainが呼ばれる前に実行属性を付ける処理を呼ぶとmainを実行できたw
>>46
自分は基本PCのOSしか知らないんですが、元の話で暗黙のうちに想定している
環境は何ですか? やはりプラットフォーム依存性が高いかと。
組み込み系とか興味はあります。
というわけで話を膨らませてみたつもりw

49 :
クリックするだけで感染、みたいなのが多かった時期にソースを読んでると、
コード内にマシン語がデータとして居るのは、珍しくはない光景だったんだな
組み込みじゃないけど

50 :
>>41 ごめん、LSIC-80の8085用オプションで。

51 :
>>49
いわゆるトランポリンコードを実行するにはスタックとかヒープに実行属性が
付いてないとできないけど、今はセキュリティ上の問題になる。
でも古いコードだとそういうテクニックを使ってたりするのがあるから、互換性を
保つには闇雲に実行属性を落とせなかったり。
ユーザーの皆さん、古いアプリのサポートを打ち切るのは単に新しいバージョン
を買うように仕向けている訳じゃないんですよ、みたいなw

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

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

54 :
非公開命令でも吐いたら面白いのになあ。仕事では使えんけど。
http://home.comcast.net/~kvaughn65D/UnDocum_8085_Instructions.pdf

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

56 :
うーんわからない。とある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 :
あっとタブが飛んだ 再投稿
うーんわからない。とある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 :
>>57
なんで最後に
>(gdb) x/xg 0x800f55390
も一回やらんの?

59 :
変わってなかったのでコピペしませんでした。
(gdb) x/xg 0x800f55390
0x800f55390 0x0000000800f5bf98

60 :
念のために逆アセのバグも疑ってみない?

61 :
それも疑ってみてました。正しいようです
(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 :
>>61
>違うコンパイラでコンパイルしてみたらコンパイルが終了しない...
C2Dのバグかも?w

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

64 :
理解できない現象を何でも自分以外のせいにするのは素人。

65 :
コンパイルの山場は通過した模様。
たかだが50000行くらいのソースのコンパイルに20分くらいかかった。

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

67 :
行きつく先がC2Dかはわからないけど、動く条件と動かない条件絞っていかないと
原因にたどり着けないでしょ。
問題の個所は別の呼び出しでは問題なく通っているので、
原因がC2Dと仮定するとえれー複雑な条件が必須なはずでお手上げかもだけど。
実は「おめーがx64のアセンブラ知らねーのが原因、その命令は他のレジスタも
参照してる」とかいう罵声も期待してたけど、飛んでこないところをみるとそう
じゃなかったらしい。
ちなみにシングルスレッドなので別スレッドが書き換えてるもないです。(多分)

68 :
>>67
>ちなみにシングルスレッドなので別スレッドが書き換えてるもないです。(多分)
プロセッサのバグ疑うんならOSも疑うべきだろ

69 :
>>67
>行きつく先がC2Dかはわからないけど、動く条件と動かない条件絞っていかないと
>原因にたどり着けないでしょ。
別のコンパイラ試すってのは条件絞ってることにはならんよ。

70 :
やり方によってはなるよ。

71 :
ならないよ

72 :
別のコンパイラを試した → 動いた → 前のコンパイラが原因
とはならない。可能性のひとつとして考えられるというだけ。
前のコンパイラが原因の可能性のひとつであるということは別のコンパイラを試す前と変わらない。

73 :
コンパイラ変えてコンパイルしなおすだけだったら、そうだろうね。
やってる本人が出来るといってる方法でやってるんだからいいじゃん。

74 :
やってる方法がトンチンカンだから書いてるプログラムがクソであることは容易に想像がつく

75 :
自分が想像できない事に言いがかり付けない方がいいよ。
ゴミクズみたいのが絡んできたし、これ以上有益な情報得られない
だろうから退散します。
結果わかったら報告しに戻ってくるかも。

76 :
最後までクズでした

77 :
説明の責任は質問する側にあることが解ってないお子様なんだろう

78 :
>自分が想像できない事に言いがかり付けない方がいいよ。
これが噂に聞くブーメランと言う奴か。

79 :
ゴミクズが粘着してるだろうなと思って覗いてみたら案の定粘着しててわろた。
説明責任とか言いながら、詳しく説明されてない方法を「それではできない」とか
断定しちゃう頭の悪さに気づかないのだろうか。
久しぶりに質問者側に回ってみたが、ゴミクズの最底辺さにはあきれ返る。
ほら、遊んでやるからかかってこいよ。

80 :
あら?バカが釣れてるw

81 :
x64のいい逆汗ないかねえ
IDAが有名だが、x64は割らないと無理だし。

82 :
あら、普通に買えばいいじゃない
http://www.hex-rays.com/products/ida/index.shtml

83 :
貧乏人ばっかだな

84 :
汗・逆汗で食ってるわけじゃないからねえ
予算が下りないんだよ

85 :
>>84
遊びなら自腹切れよ

86 :
そして>>81にもどる

87 :
windbgじゃダメなのでしょうか?
他のデバッガにはそんなに便利な機能ありますか?

88 :
>>87
おまえはそれ使ってればいい

89 :
使途にもよるが、プラグインアリなら、かなり強力
VMと組み合わせて、仮想シリアルデバッグも楽しい
あとntsd/cdbもよろしく。

90 :
今時, たくさん並ぶコンソールのスイッチを ON/OFF して,
ロードスイッチを押す作業のなにが楽しいんですか?
俺なら, 迷わずアセンブリ言語を選択します

91 :
1バイトずつ打ち込むような体験も、一度はしてみとくべきだとおもうんだ
壊れやすいパチパチスイッチはこわいから、大幅に譲ってテンキー(0-9A-F)でいいよ

92 :
ポリオミノを生成するプログラムを教えてください(できればC言語で)

93 :
マルチ乙

94 :
はわわー

95 :
RX210 CPUマニュアルの内蔵ROMへのプログラム/イレーズの所を読んでいます。
FENTRYRのLSB側に01hまたは02hを書いた以降にROMリードが起きると
ROMアクセス違反でコマンドロック状態が発生する。
だから 「RAMへジャンプしてから」 FENTRYR を書き替えている。
この理解で合っていますでしょうか?

96 :
上のはたぶん合っていると思うんですけど、そうすると、reset時にFCUに対して
周辺クロック通知コマンドを使うときに、hwsetup( )はROMで動くから困るんじゃ
ないかなあ・・・FENTRYRのLSBに01hを書いてからコマンドを書くんだけど、
FENTRYRを書き替えた直後からROMアクセス違反が発生しちゃうことになる。

97 :
こんなところで仕事の質問をするものではない。
ばれたらどうなるか考えてみな。

98 :
答えられる奴が気軽に答えればいい
仕事の話なら、ここでヒントもらって、裏を自分で取ればいい そこは仕事。
今までwebの仕事ごくろうさん、午後から組み込みやってください、ソロで。
みたいな無理ゲーもいまどきあるらしいじゃないか。
俺はアマだが、汗しらない奴の、いまさら人に聞けない質問には付き合ってるぜ

99 :
リングバッファのリード/ライトポインタから滞留数を計算する手法を教えてもらった
のがこのスレだったような。 あれで滞留数の変数を追放できて役に立ちました。
今度のは新しい石だから、さすがにまだ体験者は居ないのかなあ・・・
マニュアルを何十辺も読んでると、こういう意味で書いてるのかなと判る所もあるけど、
ホント悪文だし。ここ2ヶ月でリビジョン3つも進んでるから変わってる最中。

100 :
RX210の、コード格納用ROMとデータ格納用ROMの章がようやく理解できてきた。
コード格納用ROMのプログラム手法の説明 40.6.4.2(5) プログラム方法 で言ってる手順
第3 サイクルのアクセスでは、プログラム対象領域の先頭アドレスに対して
書き込みデータをワードサイズで書いてください。この際、先頭アドレスは
128 バイト境界にアラインしたアドレスを使用してください。
と、40.6.2 FCU コマンド一覧 表40.6 FCUコマンドのフォーマット
で言ってるWAの表現に矛盾があると思う。
WA: ROM 書き込み先アドレス
    書き込みデータ2/8/128 バイトの先頭アドレス
前者は128byteアラインだけでいいと言っているし、後者は書き込みデータのアライン
2/8/128 に従え と言っている。 誰かこれ体験して解明した人居ませんか?


100〜のスレッドの続きを読む
【質問】C++でソフト開発したい!【初心者】
自然言語処理スレッド その4
MFC相談室 mfc23d.dll
Borlandにはやられた...
テスト
Pythonのお勉強 Part63
疑似乱数2
【GUI】wxWidgets(旧wxWindows) その5【サイザー】
Kotlin 6
C#で仕事ある?
--------------------
差別意識・RF乖離・集団ヒステリー
京都 滋賀 専用
【ASUS】EeePC 4G-X & 701SD-X 7台目
【田中圭】OL俳優と信者について語るスレ【吉田鋼太郎】Part.110
【かつ丼】かつや49杯目【とん汁】
綾辻行人 46
Yahoo!プレミアム無料キャンペーン総合Part66
稲庭うどんって不味いよね
*** 林遣都 20 ***
秋元真夏がキャプテンなんて乃木ヲタとして恥ずかしいし悔しいよ★6
FILCOっていいよな? 24チャタ目
        DONA     
【●宇宙流】新・武宮正樹スレ Part6【○自然流】
ロコ抜き、ルックス重視でカーリング女子選抜チーム
【国際】黒人が感じている痛みに共感できない日本人にがっかり…「暴動略奪をする理由わからない」という人は知らないうちに死んでる★2 [あしだまな★]
【Rio】SUシリーズ総合スレ【10/35/70】 4
倉嶋丈康スレ その5
アルファポリス漫画を語るスレ
狼のドラクエウォークスレ 41
【韓国】 「全斗煥は謝罪せよ」光州事件40周年、自宅前まで人形行進して糾弾(写真)[05/18] [蚯蚓φ★]
TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼