[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 06/24 11:52 / Filesize : 195 KB / Number-of Response : 910
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

アセンブラ… Part 12



1 名前:デフォルトの名無しさん [2007/08/14(火) 17:18:08 ]

アセンブラ全般に関するスレッドです。

【前スレ】
アセンブラ… ( ゚д゚)ウッウー
pc11.2ch.net/test/read.cgi/tech/1174825173/



174 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 21:51:52 ]
それは人生の無駄遣い。

175 名前:デフォルトの名無しさん [2007/11/08(木) 22:35:04 ]
MIPSって普及してるの?
ARMに押されていそうだよね。

176 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 10:44:04 ]
宿題丸投げがあるところをみると
馬鹿大学生の間では普及率が高いらしい。<MIPS

177 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 10:50:44 BE:1657152779-2BP(125)]
それはパタヘネ(コンピュータの構成と設計)がMIPS使ってるからじゃないかな

178 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 11:19:47 ]
だね。大学だとMIPSで教えるから認知度は大きい。
ARMは作ると訴えられてしまうw


179 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 19:49:23 ]
PICがMIPSになったそうだからMIPS逆襲のオカン。

180 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 20:33:34 ]
ほぅ。
ttp://www.microchip.com/stellent/images/mchpsiteimages/BLOCK.jpg
AVR32みたいな独自コアじゃないのか。

まあMIPSのアセンブラを手書きしたいとは思わねーが。


181 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 13:23:42 ]
「アセンブラが怖い」なんて、誰がいってるの?(1/3) − @IT MONOist
ttp://monoist.atmarkit.co.jp/fembedded/articles/miconkiso1/07/miconkiso1_07a.html

182 名前:デフォルトの名無しさん [2007/11/15(木) 23:30:45 ]
64ビットのすごさがわかるマシン語書ける人、
サンプル見せて欲しい。



183 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 23:49:40 ]
なにも考えずに書いても速度アップするのが64ビットの凄いところ

184 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 01:40:24 ]
linuxのコード読みたいんだが疑似命令がよくわからん。
どこかいい解説してるとこない?

185 名前:デフォルトの名無しさん [2007/11/16(金) 16:13:08 ]
>>1

186 名前:デフォルトの名無しさん [2007/11/16(金) 21:29:23 ]
初回例外は ntddll.dll にあります。
0xc00000008:invalid handle

7C94EB53 mov dword ptr [esp],eax
7C94EB56 mov dword ptr [esp+4],0
7C94EB5E mov dword ptr [esp+8],0
7C94EB66 mov dword ptr [esp+10h],0
7C94EB6E push esp
7C94EB6F call 7C94EBAC
7C94EB74 mov eax,dword ptr [esp]
7C94EB77 mov esp,ebp
7C94EB79 pop ebp
7C94EB7A ret
7C94EB7B nop
7C94EB7C lea esp,[esp]
7C94EB83 lea ecx,[ecx]

どういう意味かわかる方居ませんか。
ドラッグドロップ系の操作をするとこれが出ます。

187 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 21:36:35 ]
その情報の意味を知り得るのはそのソースを持ってる奴だけだよ。

188 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 23:07:38 ]
>>186
エラーメッセージ以上の事はわからない。
invalidなhandleを渡してるために例外発生して止まってる。
表示されてるコード自体はスタックにパラメータ積んで関数呼び出ししてる部分だけ。
意味の通じるラベルが表示されてないから、callで呼びだしてる先の動作がどうなってるかは不明。

原因はわからないが、おそらく次にあげる2つのうちどちらか。
・dllを使ってるプログラムにバグがある。
・ntddll.dllが壊れている。

対策としては
・プログラミングしててデバッグ中に出るなら、ソースを良く確かめる。
・何かアプリケーションソフトを使ってて出るのなら、sfc /scannowでWindowsファイルが壊れてないかチェック。
もしくは、そのソフトの使用を諦める。

189 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 00:24:42 ]
kiRaiseUserExceptionDispatcherでinvalid handle

190 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 01:46:05 ]
メモリ破壊系のバグ(ex同期ミス)がkernel handle/critical section(内部でeventを持ってる)に及ぶと
そうなるときもあるけど、正直それアセンブラがどうとかじゃなくてwindowsプログラミングだから。
デバッガでsymbolちゃんと設定すりゃもうちょいマシな逆アセになるよ

191 名前:デフォルトの名無しさん [2007/11/17(土) 12:46:44 ]
アセンブラでマシン(ノートPC Dynabook)をrebootさせる方法が知りたいです。
簡単にできるのでしょうか?


192 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 13:08:54 ]
何故アセンブラ?
OS依存のAPI使えばできるだろうが



193 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 14:02:15 ]
rebootなんて、どこだかのアドレスに飛ぶだけだぞ。
どこだったか忘れたがw

194 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 16:08:18 ]
>>193
なんとも脆弱なOSだな、それ

195 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2007/11/17(土) 17:04:00 ]
rundll user.exe,exitwindowsexecってもう使えないんだっけな

196 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 23:14:18 ]
>191

OSによるけど、簡単にはできない。
Win系、PC-UNIX系ならカーネルモードで動作する必要があるだらうから、
ドライバじゃないと無理。
あるいはOS依存のAPIに飛ばせばよいが、引数をちゃんと設定するには
Cとかで作った実行ファイルを逆アセンブルしないとわからん。

古いMS-DOSだと193の言う通り、FFFF0hに飛ぶだけ。


197 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 10:09:47 ]
nasm 2.00RC1
バージョン飛んだwww

198 名前:デフォルトの名無しさん [2007/11/19(月) 20:22:46 ]
AT互換機でハードよりの何か良い書籍はありませんか?

199 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2007/11/19(月) 23:09:35 ]
Pentiumマシン語入門編

200 名前:デフォルトの名無しさん [2007/11/21(水) 19:55:02 ]
1<=N<=12の範囲で0<=a<=b<=c<=d<=Nかつa+b+c+d=Nとなるすべての数を求める
プログラムでN==6,のときd=2,c=2,b=2,a=0の次の配列はd=2,c=2,b=1,a=1と
しないといけないのですがd=2,c=2b=2,a=0でプログラムが終了してしまいます
分岐式がおかしいと思うのですがうまくいきません、アセンブラはこうなりました
EOR ACC,ACC
ADD ACC,07h
ST ACC,[0A0h]
EOR ACC,ACC
ST ACC,[0A1h]
LD IX,0B0h
ST IX,[0A2h]
LOOP1: CMP ACC,[0A0h]
BGE END
LD ACC,[0A0h]
SUB ACC,[0A1h]
CMP ACC,01h
BNZ LABEL7
ST ACC,[0A3h]
LD ACC,[0A0h]
CMP ACC,04h
BGT END

201 名前:デフォルトの名無しさん [2007/11/21(水) 19:56:51 ]
LD ACC,[0A3h]
LABEL7:ST ACC,[0A3h]
LD IX,ACC
LD ACC,[0A0h]
SUB ACC,IX
LD IX,[0A3h]
LOOP2: CMP ACC,IX
BLE LABEL1
SUB ACC,01h
BA LOOP2
LABEL1:ST ACC,[0A6h]
LD IX,[0A3h]
LD ACC,[0A6h]
ADD IX,ACC
ST IX,[0A4h]


202 名前:デフォルトの名無しさん [2007/11/21(水) 19:57:37 ]
LABEL4: LD ACC,[0A0h]
SUB ACC,IX
LD IX,[0A6h]
LOOP3: CMP ACC,IX
BLE LABEL2
SUB ACC,01h
BA LOOP3
LABEL2:ST ACC,[0A5h]
LD IX,[0A4h]
ADD IX,ACC
LD ACC,[0A0h]
SUB ACC,IX
LD IX,[0A5h]
CMP ACC,IX
BLE LABEL3
LABEL6:LD ACC,[0A1h]
ADD ACC,01h
ST ACC,[0A1h]
BA LOOP1
LABEL3:ST ACC,[0A7h]
LD IX,[0A2h]
LD ACC,[0A3h]
ST ACC,[IX]
ADD IX,01h
LD ACC,[0A6h]
ST ACC,[IX]
ADD IX,01h




203 名前:デフォルトの名無しさん [2007/11/21(水) 19:59:31 ]
LD ACC,[0A5h]
ST ACC,[IX]
ADD IX,01h
LD ACC,[0A7h]
ST ACC,[IX]
ADD IX,01h
ST IX,[0A2h]
LD ACC,[0A6h]
CMP ACC,02h
BGE LABEL5
LD ACC,[0A5h]
cmp ACC,02h
BZ LABEL8
BA LABEL6
LABEL5: SUB ACC,01h
ST ACC,[0A6h]
LD IX,[0A3h]
ADD IX,ACC
ST IX,[0A4h]
BA LABEL4
LABEL8:SUB ACC,01h
LD IX,[0A4h]
ADD IX,ACC
LD ACC,[0A3h]
SUB ACC,IX
ST ACC,[0A5h]
BA LABEL3
END: HLT
end
ご助言お願いします

204 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 20:16:54 ]
デバッガで試せ。

205 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 22:10:49 ]
>ご助言お願いします
だらだらコピペすんな。

206 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 07:35:01 ]
フローチャート起こしてじっくり考えてみろ。


207 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 08:52:56 ]
8086(x86)の逆アセンブラでお勧めってあります?
98のゲーム(プリペル)を解析してWindowsに移植しようと思っているんだけど…

98エミュレータに手を加えて、CPU上で動くコード部をそのままdumpするつもりです。
そしてdumpされたコードを逆アセンブルして解析していく方法を考えています。

208 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 12:18:35 ]
一から作ったほうが早いんじゃまいか・・・

209 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 13:45:27 ]
>>208
あのプリペルの、歩幅とキー入力の絶妙なシンクロは
ぜひともそのまま再現したいんですよ

210 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 13:54:11 ]
ZZ86

211 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 13:54:36 ]
98をよくしらないんだがエミュレータを間に挟むのはなんで?

212 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 14:01:33 ]
>>210
98用のアセンブラはちょっと。
でもMDEとか懐かしいね。

>>211
DOSフォーマットじゃない独自のファイルシステムなので、
ディスアセンブルするのは起動から追わなくてはいけないので
結構面倒なんです。どこがコード部分かもわかりませんしね。

知りたいのはメインルーチンのみなので、
明らかにコードが通過した場所のみをダンプするのが楽そうに思えました。
ただ、万が一ダイナミックにコードが展開されていたらダメですけどね。



213 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 14:16:38 ]
だいたいわかった
その用途なら高機能なのより素直な奴の方がよさげだが詳しくないのでなんとも
dispeかおりーでばっぐあたりじゃだめか

214 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 14:35:26 ]
>>213
プロセスでもexeファイルでもなく、
単純にコードの羅列を逆アセンブルするという用途なのですが、
どうもそういう低機能な逆アセンブラはないみたいなんです。

dispeもOllyDbgも、プロセスもしくはファイル単位で
ディスアセンブルをするようです。

215 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 15:12:05 ]
ああdispeはともかくollyはエミュごとかけるってのを想定してた


216 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 15:19:49 ]
あるいはダミーのPEヘッダつけてやるってのも手か?

217 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 17:05:06 ]
ダミーのPEヘッダだとJMPFとか面倒そうですね
下手に分析されると変なところにラベル作られてしまいそう
そこらへんは手作業でやるしかないかな

218 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 17:25:28 ]
だなあ
シンプルなのが欲しいなあ

219 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 18:52:01 ]
>単純にコードの羅列を逆アセンブルするという用途

うさみみハリケーンだと、プロセスメモリの指定範囲だけ逆アセンブルできる。
あと、うさみみハリケーンの付属ソフトを使えば、バイナリデータをテキストか
ファイルで指定して、逆アセンブルするのも可。

シンプルな逆アセンブラってことなら、↑でいけるかと。

220 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 20:50:25 ]
>単純にコードの羅列を逆アセンブルするという用途
俺はnasmについてくる逆アセンブラを使ってる。

ndisasm test.bin > test.asm

コレでおkだと思う。

221 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 20:51:22 ]
debug.exe…

222 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 21:48:10 ]
Sourcer

ってまだ売ってたっけ・・・?



223 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 23:53:25 ]
symdeb.exe

224 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 00:10:36 ]
>>207
古のソーサー

225 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 17:53:23 ]
まずファイルを抽出すること

226 名前:デフォルトの名無しさん [2007/11/24(土) 22:31:13 ]
MASMの演算子offset,segと同じ意味のNASMは何にあたるのでしょうか?

NASMの本で良書をご存知の方、教え

227 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 23:07:27 ]
>>226
「教え」?
「てちょんまげ」?



228 名前:デフォルトの名無しさん [2007/11/24(土) 23:53:30 ]
>>227

て下さい。

です。失礼しました。


229 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 16:59:27 ]
あーちくしょー
アセンブラ使いてー
ニモニックで書きてー
スタック使いてー
オールレジストリの高速関数書きてー

 あーちくしょー

230 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 17:30:38 ]
レジストリ?

231 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 18:21:21 ]
もうちょっと激しく突っ込んで下さいですorz

232 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 18:22:18 ]
オールレジストリか…
変数の格納場所としては面白いかもな



233 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 14:43:09 ]







???

234 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 02:15:05 ]
table番地以降にいくつかの32ビットの符号付きの整数が入っているとして
その中に負の数がいくつあるかをカウントして
結果をcount番地に入れるプログラムを書け
ちなみにARMを使ってます
AREA QET13,CODE
ENTRY
LDR R0, =table
MOV R1,#0
MOV R2,#0
loop
LDR R0,[R0, R1, LSL #4] ;R0 = table[R1]
CMP R0,#0
ADDLT R2,R2,#1
BNE loop
SWI 0x11
table DCD 0xf1560012
DCD 0x1560012f
DCD 0x80330123
DCD 0x7f611c22
DCD 0xa0000242
tableEnd
DCD 0
END

まだ習いはじめでよくわかりませんが正の数1回カウントするとループをぬけてしまいます
どうか御教授お願いします

235 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 02:52:31 ]
>>234
ARM知らないけど、
R0をポインタとして使っているのに中身を代入して破壊してたり、
R1を更新していなかったりしてない?

236 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 16:43:47 ]
俺も知らないけど、ADDを非フラグ操作にするんじゃね〜の?

237 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 17:36:17 ]
ARMしらんけど

ADDLT R2,R2,#1

これはなにやってんの?

238 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 17:45:39 ]
R1加算が抜けているので無限ループするはずだがそれは置いておいて
LSL #4は4ビット左シフトだから一度に16バイト進んでいるのが原因だと思う

239 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 17:54:46 ]
ENTRY以降を擬似cで書くと、こういうことじゃないの?

R0 = table;
R1 = 0;
R2 = 0;
loop:
R0 = R0[R1 << 4];
condition = R0 - 0;
if (condtion < 0) R2 = R2 + 1;
if (condtion != 0) goto loop;
SoftwareIntrrupt(0x11);

となると、問題点は
・R0の破壊(from >235)
・R1の更新がない(from >235, >238)
・R1のシフト量がおかしい(from >238)
ってことだね。

240 名前:デフォルトの名無しさん [2007/11/27(火) 23:50:55 ]
NASMでセグメント演算子はどうするのでしょうか?
オフセットは以下のようにすればOKですが、このセグメントはわかりません。


mov ebx, orz
hlt

orz 0


241 名前:デフォルトの名無しさん mailto:age [2007/11/28(水) 00:25:46 ]
youtubetv.atspace.com/?2xfbo5@JustKakuuYoSay

242 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 15:09:30 ]
初めて自力での改造に成功したぜ

( ゚д゚)ウッウー



243 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 16:48:28 ]
mpeg compass.jp
名古屋駅近辺でお話しましょう

244 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 12:49:24 ]
A8R8G8B8のα値まで含めたアルファブレンドをMMX化しようと考えているのですが、
どうしても除算が3回から減らせず、なかなか思うような速度が出ません。
Cで書くと

temp_a = ((256 - src_a) * dest_a) >> 8;
new_a = src_a + temp_a;
new_r = (dest_r * temp_a + src_r * src_a) / new_a;
new_g = (dest_g * temp_a + src_g * src_a) / new_a;
new_b = (dest_b * temp_a + src_b * src_a) / new_a;
(ただし 0 < dest_a <= 255, 0 < src_a < 255)

のようになり、積和の部分が目にとまったので、MMXで書けないかと考えました。
案の定RGBの積和部分(dest_x * temp_a + src_x * src_a)は簡単に書けたのですが、
三色素同時にnew_aで割る方法や式変形がどうしても分からず、結局三回divを使ってしまっています。
この除算を減らす、もしくは他の方法で高速化するような方法はないでしょうか。
諸事情によりPen2でそれなりの速度を出さなければならず、四苦八苦しています……。

245 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 14:02:16 ]
ソースうp

246 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 14:17:49 ]
さきに
temp_a / new_a
src_a / new_a
を計算しておいてそれをかけりゃいいんじゃないの?

247 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 15:14:17 ]
それを整数演算でやるわけにはいかないだろ。しかも、割り算が二回だし。
# それはそうと、Pen2はSSEないんだっけ? あれば単精度演算も遅くないんだが……

248 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 16:07:39 ]
ちょっと誤差がでるけど、俺だったらこうするかな?

new_a = src_a + temp_a;
new_r = (dest_r * temp_a + src_r * src_a) / new_a;



new_a = src_a + temp_a;
temp_div = 65535/new_a; //実際にはテーブル化して temp_div = table[new_a];
new_r = ((dest_r * temp_a + src_r * src_a) * temp_div) >> 16;
// ( x * temp_div ) >> 16 はPMULHWを使用

249 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 17:02:47 ]
pmullwは符号付きだから>>244のdest_r * temp_aとかできないと思ったが、
下位16bitだけのpmullwは符号なしにも使えるんだったな。

>>248にもpmulhwは符号付きだとツッコミ入れようとしたら、
出てくるnew_rの値は明らかに32767以下だから関係なかった。。

250 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 17:18:32 ]
PMULHWは符号付きだったのか…。
符号なしのPMULHUWはPen3で追加された命令で
Pen2ではサポートしてないのね。

251 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2007/12/29(土) 05:12:56 ]
MMX アルファブレンドでググったらそのものなソースが出てくるが。


252 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 16:25:45 ]
RGBで分けなくてもいいと思うんだけど



253 名前:244 mailto:sage [2007/12/29(土) 21:39:45 ]
>>245-252
ありがとうございます。
>>246さんのアイデアを元に少しもじって、
無事除算の回数を一回に減らすことができました。
また、>>248さんのテーブルを使った手法でも、
それとほぼ同程度の速度を出すことに成功しています。
これなら何とか要求されている時間を満たせそうです。

参考までに変形後の式を書いておきます。

temp_a = (256 - src_a) * dest_a >> 8;
new_a = src_a + temp_a;
// temp_a / new_a + src_a / new_a = 255より
dest_temp_a = (temp_a << 8) / new_a;
src_temp_a = 255 - dest_temp_a;
// 以下、pmaddwdを用いて並列計算
new_r = (dest_r * dest_temp_a + src_r * src_temp_a) >> 8;
new_g = (dest_g * dest_temp_a + src_g * src_temp_a) >> 8;
new_b = (dest_b * dest_temp_a + src_b * src_temp_a) >> 8;

>>251
MMXを使うものも含め、アルファブレンドのソースはよく紹介されていますが、
出力先のα値まで保証するものは少し調べた限りでは見当たらなかったので、
今回は自作してみることにしました。

254 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 23:06:46 ]
出力先のα値は何に使うの?

255 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 06:31:12 ]
>>254
最終的に別の画像にまたアルファブレンドします。
出力先のα値が保証されていると、
複数枚の画像をブレンドした状態でキャッシュできるので、
枚数が跳ね上がったときに重宝しています。

256 名前:デフォルトの名無しさん [2007/12/31(月) 23:16:29 ]
全部アセンブリでCからリンクできる関数を書きたいのですがどうすればいいでしょうか?
まったく見当もつかず途方にくれてます。
ポインターだけでもいいので教えてください。

257 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 23:21:35 ]
gcc -S foo.c

258 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 23:23:57 ]
>>256
というか、先ずは環境を明らかにしようぜ。

259 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 23:39:11 ]
x86のLinuxか、PowerPCのLinuxでお願いします。
gccです。
>>257
それはアセンブラをじっと眺めろということでしょうか???

260 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 23:48:21 ]
何か関数を作って、法則見つけようぜ、ってことじゃね。

とりあえず、

・ 最初と最後にはスタックフレームの確保を行うと楽。
 ebp とか esp とかいじってる部分がそれ。
・ 退避すべきレジスタがいくつかある。最初と最後で push/pop してるやつがそれ。
・ 引数を渡すときは、基本的には引数をスタックに push する。
 後ろの引数から push するか前のから push するかはコンパイラ次第。確認しる。
 可変長引数かどうかで変わる事もあるので注意する。
・ 関数を呼んだ後に引数の分だけスタックポインタを戻すには、
 呼び出し側から esp に引数のサイズだけ add するか、
 関数から戻る時に ret の引数を使うかする。
 どっちなのかはコンパイラ次第。確認しる。
 可変長引数かどうかで変わる事もあるので注意する。
 標準関数を call した後に add する必要があるかどうかも確認しる。

261 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 01:08:32 ]
2008年こそアセンブラをマスター!

262 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 13:50:30 ]
>>260
どこかにその法則を説明しているサイトなり書籍はないですか?
というとか誰かアセンブラを習うのに最適な学習書を紹介してください



263 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 14:20:46 ]
>>262
gcc.gnu.org/

264 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 15:19:25 ]
>>262
asm-cだけわかればいいのか?
結局、石のアーキ知らないと、asm使う意味が薄いよ。
x86とppcじゃ違いすぎ。

265 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 16:26:57 ]
昔、ボーランドのTURBOシリーズでCやPASCAL(Delphi)やらからAssmを呼び出す為の説明が在ったのを思い出した。

266 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 17:39:36 ]
calling convention gcc でぐぐれ。stdcall fastcall cdeclでもいいぞ。


267 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 01:08:01 ]
regparm使って破綻しそうな予感。

268 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 21:38:01 ]
久しぶりにbinutilsのスナップショットきた。
asでも-marchのサポートとかが入ったから遅れたのかな?

269 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 17:32:51 ]
コードをエンコードしてセクション名ブランクにしてセクションの属性を
IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_WRITE
にしてる実行時デコード型プログラムの逆アセ面倒くせー!!

はぁ、ちょっちスッキリした。

270 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 19:44:45 ]

IA-32(x86) GASでよかったら
「プログラミングの力を生み出す本 インテルCPUのGNUユーザーへ」
ssl.ohmsha.co.jp/cgi-bin/menu.cgi?ISBN=4-274-13207-2
なんてどうかな?
NASMにシフトするにしてもGASは知ってて損はないとおもうし
スタックフレームの説明ぐらいなら書いてありますよ

271 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 02:54:50 ]
人生nopだ。

272 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 19:45:38 ]
>>271
イ`



273 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 19:57:29 ]
死ぬということじゃなくて,
何もせずに時(クロック)だけが進んでいく,って意味じゃまいか

274 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 21:08:24 ]
hlt
後で起こしてくれ






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<195KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef