初心者OK!質問大歓迎!のアセンブラのスレッドです。
基本情報の勉強中の人、PICやH8を勉強中の学生などなど…
前スレ
アセンブラ初心者スレッド
http://echo.2ch.net/test/read.cgi/tech/1314502612/
関連スレ
アセンブラ 13
http://echo.2ch.net/test/read.cgi/tech/1314512680/
探検
アセンブラ初心者スレッド 2©2ch.net
レス数が1000を超えています。これ以上書き込みはできません。
2017/04/13(木) 17:35:55.70ID:1WMn3pSz
917デフォルトの名無しさん
2020/11/26(木) 20:42:01.46ID:l8W6EZba よく使う命令を重点的にトランジスタを大量投入して速くしようというのはコードの互換性を大事にしてるからの発想。古いコードでも速く動かしてやるという努力の賜物のx86。
一方、使わない命令は削除、もう頭使うのが嫌だからと最適化はコンパイラの仕事と最適化を放り出して衰退したRISC哲学。
一方、使わない命令は削除、もう頭使うのが嫌だからと最適化はコンパイラの仕事と最適化を放り出して衰退したRISC哲学。
918デフォルトの名無しさん
2020/11/26(木) 20:43:40.28ID:lH6B10sG >>916
mov reg,0
は、オペランドも全て含めて2バイト。
0は、short formで8BITオペランドになるから。
xor reg,regは、immオペランドが無くても2バイト。
なぜなら、movは、特別な短いマシン語が割り当てられているのに、xorは
そうではないから。
mov reg,0
は、オペランドも全て含めて2バイト。
0は、short formで8BITオペランドになるから。
xor reg,regは、immオペランドが無くても2バイト。
なぜなら、movは、特別な短いマシン語が割り当てられているのに、xorは
そうではないから。
919デフォルトの名無しさん
2020/11/26(木) 20:50:33.32ID:weG7Hi1V タブ機能付きのソフト(AcrobatReaderとかテキストエディターとか)の現在アクティブな
タブのファイルパスのアドレスを調べたいんですけど、めちゃめちゃ頑張ったんですけど無理でした。
わかったことは、AcrobatReaderの場合、開いた順にインデックスが振られて(初めの値は0
ではなく1)、アクティブタブのインデックスが格納されたアドレスがあるということです。
もしくはインデックスが振られるのではなく、ファイルパスを開いた順に配列にプッシュして
ファイルパス配列[アクティブタブのインデックス - 1] のタブをアクティブにしろという命令が出てる。
前者の場合、インデックスが格納されてるアドレスがどこかさっぱりわかんなくって、ファイルパス
のアドレスからちょっと前をみたりマックスパスの260Byte後ろのとこを見たりしたんですけど
それらしきインデックスが見つかりませぬ。
それで、ファイルパスにアクセスしてる関数を見たんですけどアセンブリ言語サッパリ( 一一)
どなたか助言お願いします。
ファイルパスにアクセスしてるらしき関数↓
AcroRd32.dll+4637E - 33 D2 - xor edx,edx
AcroRd32.dll+46380 - 8B C1 - mov eax,ecx
AcroRd32.dll+46382 - 66 39 11 - cmp [ecx],dx
AcroRd32.dll+46385 - 74 08 - je AcroRd32.dll+4638F
AcroRd32.dll+46387 - 83 C0 02 - add eax,02 { 2 }
AcroRd32.dll+4638A - 66 39 10 - cmp [eax],dx
AcroRd32.dll+4638D - 75 F8 - jne AcroRd32.dll+46387
AcroRd32.dll+4638F - 2B C1 - sub eax,ecx
AcroRd32.dll+46391 - D1 F8 - sar eax,1
AcroRd32.dll+46393 - 5D - pop ebp
AcroRd32.dll+46394 - C3 - ret
もう1週間くらい頑張ってます。宜しくお願いします。
タブのファイルパスのアドレスを調べたいんですけど、めちゃめちゃ頑張ったんですけど無理でした。
わかったことは、AcrobatReaderの場合、開いた順にインデックスが振られて(初めの値は0
ではなく1)、アクティブタブのインデックスが格納されたアドレスがあるということです。
もしくはインデックスが振られるのではなく、ファイルパスを開いた順に配列にプッシュして
ファイルパス配列[アクティブタブのインデックス - 1] のタブをアクティブにしろという命令が出てる。
前者の場合、インデックスが格納されてるアドレスがどこかさっぱりわかんなくって、ファイルパス
のアドレスからちょっと前をみたりマックスパスの260Byte後ろのとこを見たりしたんですけど
それらしきインデックスが見つかりませぬ。
それで、ファイルパスにアクセスしてる関数を見たんですけどアセンブリ言語サッパリ( 一一)
どなたか助言お願いします。
ファイルパスにアクセスしてるらしき関数↓
AcroRd32.dll+4637E - 33 D2 - xor edx,edx
AcroRd32.dll+46380 - 8B C1 - mov eax,ecx
AcroRd32.dll+46382 - 66 39 11 - cmp [ecx],dx
AcroRd32.dll+46385 - 74 08 - je AcroRd32.dll+4638F
AcroRd32.dll+46387 - 83 C0 02 - add eax,02 { 2 }
AcroRd32.dll+4638A - 66 39 10 - cmp [eax],dx
AcroRd32.dll+4638D - 75 F8 - jne AcroRd32.dll+46387
AcroRd32.dll+4638F - 2B C1 - sub eax,ecx
AcroRd32.dll+46391 - D1 F8 - sar eax,1
AcroRd32.dll+46393 - 5D - pop ebp
AcroRd32.dll+46394 - C3 - ret
もう1週間くらい頑張ってます。宜しくお願いします。
920デフォルトの名無しさん
2020/11/27(金) 00:50:22.02ID:dazyxaWu >>918
ならないな。バイナリ出して。
0100 mov ax,0
0103 xor ax,ax
0100 B8 00 00 31 C0
B8 00 00 00 00 mov eax,0
33 C0 xor eax,eax
ならないな。バイナリ出して。
0100 mov ax,0
0103 xor ax,ax
0100 B8 00 00 31 C0
B8 00 00 00 00 mov eax,0
33 C0 xor eax,eax
921デフォルトの名無しさん
2020/11/27(金) 00:56:36.27ID:lOUpIwv2 OllyDbg などの逆アセンブラツールを使えないのか?
922デフォルトの名無しさん
2020/11/27(金) 14:37:53.57ID:35rurNSb >>919
何をしたいのかが分からないが、例えばVS2019にAcrobatReaderの*.exeファイルを
ドラッグアンドドロップして、デバッグを開始し、タブにファイルを開いた状態にする。
そこでデバッガによりアプリを停止させて、メモリー内でそのファイル名を検索する。
どうやって検索すればよいかは良く知らない。
VS2019ではなく、OllyDbgなどを使えばよいかもしれない。
それでファイル名が入っているメモリーアドレスは分かることは分かる。
もう一つは、ファイルをオープンする場合、必ず Win32 の CreateFile APIが呼び出される
ので、CreateFileの 関数アドレスにブレイクポイントを仕掛ける。
その状態で実行すると何回かブレイクしているうち、タブのファイル名に対して
CreateFileが呼び出されることがあるはず。
その状態になったら、コールスタック(呼び出し履歴)を辿って、CreateFileを
呼び出している場所を見つける。そうすると、ファイル名を渡しているコードが
見つかる。
何をしたいのかが分からないが、例えばVS2019にAcrobatReaderの*.exeファイルを
ドラッグアンドドロップして、デバッグを開始し、タブにファイルを開いた状態にする。
そこでデバッガによりアプリを停止させて、メモリー内でそのファイル名を検索する。
どうやって検索すればよいかは良く知らない。
VS2019ではなく、OllyDbgなどを使えばよいかもしれない。
それでファイル名が入っているメモリーアドレスは分かることは分かる。
もう一つは、ファイルをオープンする場合、必ず Win32 の CreateFile APIが呼び出される
ので、CreateFileの 関数アドレスにブレイクポイントを仕掛ける。
その状態で実行すると何回かブレイクしているうち、タブのファイル名に対して
CreateFileが呼び出されることがあるはず。
その状態になったら、コールスタック(呼び出し履歴)を辿って、CreateFileを
呼び出している場所を見つける。そうすると、ファイル名を渡しているコードが
見つかる。
923デフォルトの名無しさん
2020/11/27(金) 14:42:33.59ID:35rurNSb >>922
なお、ファイルパスの入っているアドレスは分かる様になるが、
当然、アドレスは毎回変化するので、果たして何をしたいか、ということになる。
ファイルパスを入れているメモリーブロックを malloc や new している
コードを探すことは出来るかもしれないし、そのアドレスをどこかに格納している
コードも探すことは可能かも知れない。
が、複雑すぎて、そこで得た知見で何かをするということは
アセンブラに最高に詳しい人でもかなり難しい。
なお、ファイルパスの入っているアドレスは分かる様になるが、
当然、アドレスは毎回変化するので、果たして何をしたいか、ということになる。
ファイルパスを入れているメモリーブロックを malloc や new している
コードを探すことは出来るかもしれないし、そのアドレスをどこかに格納している
コードも探すことは可能かも知れない。
が、複雑すぎて、そこで得た知見で何かをするということは
アセンブラに最高に詳しい人でもかなり難しい。
924デフォルトの名無しさん
2020/11/27(金) 14:47:20.40ID:35rurNSb >>923
例えば、OllyDbgなどを使えば、ファイルパスが入っているメモリーアドレスを
検索して探し出すことは出来るかも知れない。
それで見つかったアドレスを X とする。
今度は、そのアドレス X を格納しているメモリーを探すこともできることはできる
可能性がある。
その場合、little endian なので、バイトレベルでは下位バイトから上位バイトに
向かって格納されていることに注意する。
ただし、アドレスXが格納されているアドレスは、複数見つかる可能性がある。
また、X そのものではなく、X より少し小さいアドレスが格納されていることもありえる。
だから、このような解析は難しいものとなる。
またこのような方法以外に、dumpbin に /disasm オプションをつけて Acrobat の *.exeを
逆アセンブルした結果を併用するのが基本。
例えば、OllyDbgなどを使えば、ファイルパスが入っているメモリーアドレスを
検索して探し出すことは出来るかも知れない。
それで見つかったアドレスを X とする。
今度は、そのアドレス X を格納しているメモリーを探すこともできることはできる
可能性がある。
その場合、little endian なので、バイトレベルでは下位バイトから上位バイトに
向かって格納されていることに注意する。
ただし、アドレスXが格納されているアドレスは、複数見つかる可能性がある。
また、X そのものではなく、X より少し小さいアドレスが格納されていることもありえる。
だから、このような解析は難しいものとなる。
またこのような方法以外に、dumpbin に /disasm オプションをつけて Acrobat の *.exeを
逆アセンブルした結果を併用するのが基本。
925デフォルトの名無しさん
2020/11/27(金) 14:53:31.46ID:35rurNSb >>924
そのような方法で粘り強く解析していくと、dumpbinの逆アセンブルコードの
どのあたりで、ファイルパスを格納するメモリーを確保し、そのアドレスを
どこかに記録しているコードは見つかる可能性は有る。
ただし、問題はそう簡単ではなく、「どこかに記録している」の「どこか」
がまた、毎回アドレスが変わることにある。
C/C++で言えば、非常に多数の構造体が連鎖的にリンクされているから。
このくらいの規模のアプリだと、その連鎖は、10以上になることは少なくない。
連鎖の仕方もif分などで場合分けされていて、条件によって複雑に代わりうる。
ソースコードがあっても複雑すぎてなにをやっているかを理解することはとても
困難。だから、ソースコードが無い状態でそれを理解することはとてつもなく
難しい。
そのような方法で粘り強く解析していくと、dumpbinの逆アセンブルコードの
どのあたりで、ファイルパスを格納するメモリーを確保し、そのアドレスを
どこかに記録しているコードは見つかる可能性は有る。
ただし、問題はそう簡単ではなく、「どこかに記録している」の「どこか」
がまた、毎回アドレスが変わることにある。
C/C++で言えば、非常に多数の構造体が連鎖的にリンクされているから。
このくらいの規模のアプリだと、その連鎖は、10以上になることは少なくない。
連鎖の仕方もif分などで場合分けされていて、条件によって複雑に代わりうる。
ソースコードがあっても複雑すぎてなにをやっているかを理解することはとても
困難。だから、ソースコードが無い状態でそれを理解することはとてつもなく
難しい。
926デフォルトの名無しさん
2020/11/27(金) 19:42:52.50ID:ljdbT47c でも有能なハッカーはそれを解読するよね
927デフォルトの名無しさん
2020/11/27(金) 22:46:27.98ID:ULLAjR/s >>926
お前さんは有能なハッカーですか?
お前さんは有能なハッカーですか?
928デフォルトの名無しさん
2020/11/28(土) 00:05:40.76ID:OUdaBd4w >>926
ハッカーは、ハッキングに関係ないことは何もやらないでしょう
ハッカーは、ハッキングに関係ないことは何もやらないでしょう
929デフォルトの名無しさん
2020/11/28(土) 00:34:33.70ID:qjEapHwo > mov reg,0
> は、オペランドも全て含めて2バイト。
> 0は、short formで8BITオペランドになるから。
これって本当なの? そうアセンブルされないけど。
> は、オペランドも全て含めて2バイト。
> 0は、short formで8BITオペランドになるから。
これって本当なの? そうアセンブルされないけど。
930デフォルトの名無しさん
2020/11/28(土) 17:46:27.32ID:WIRcuTWz931デフォルトの名無しさん
2020/11/28(土) 20:17:09.98ID:qjEapHwo アスペなの? ボクのCPUの話じゃなく、
本人はz80ではなくx86だと言ってるからx86の話を聞いているんだよ。
他社の互換含めてx86系CPUが一体どれだけあると思ってるの? 全部確認できるわけないじゃん。
本人はz80ではなくx86だと言ってるからx86の話を聞いているんだよ。
他社の互換含めてx86系CPUが一体どれだけあると思ってるの? 全部確認できるわけないじゃん。
932デフォルトの名無しさん
2020/11/28(土) 20:21:31.70ID:kjtXSxRe >>919
です!!>>922 さんありがとうございました!
なんとアクティブタブのファイルパスアドレス見つかりました!
AHKですけど、よかったら皆さんこの関数使ってください!
;==================================================
JEE_GetAcroRd32Path(hWnd)
{
WinGetClass, vWinClass, % "ahk_id " hWnd
if !(vWinClass = "AcrobatSDIWindow")
return
WinGet, vPID, PID, % "ahk_id " hWnd
WinGet, vPPath, ProcessPath, % "ahk_id " hWnd
FileGetVersion, vPVersion, % vPPath
MAX_PATH := 260
;PROCESS_QUERY_INFORMATION := 0x400 ;PROCESS_VM_READ := 0x10
if !hProc := DllCall("kernel32\OpenProcess", UInt,0x410, Int,0, UInt,vPID, Ptr)
return
if !vAddress && A_Is64bitOS
{
DllCall("kernel32\IsWow64Process", Ptr,hProc, IntP,vIsWow64Process)
vPIs64 := !vIsWow64Process
}
です!!>>922 さんありがとうございました!
なんとアクティブタブのファイルパスアドレス見つかりました!
AHKですけど、よかったら皆さんこの関数使ってください!
;==================================================
JEE_GetAcroRd32Path(hWnd)
{
WinGetClass, vWinClass, % "ahk_id " hWnd
if !(vWinClass = "AcrobatSDIWindow")
return
WinGet, vPID, PID, % "ahk_id " hWnd
WinGet, vPPath, ProcessPath, % "ahk_id " hWnd
FileGetVersion, vPVersion, % vPPath
MAX_PATH := 260
;PROCESS_QUERY_INFORMATION := 0x400 ;PROCESS_VM_READ := 0x10
if !hProc := DllCall("kernel32\OpenProcess", UInt,0x410, Int,0, UInt,vPID, Ptr)
return
if !vAddress && A_Is64bitOS
{
DllCall("kernel32\IsWow64Process", Ptr,hProc, IntP,vIsWow64Process)
vPIs64 := !vIsWow64Process
}
933デフォルトの名無しさん
2020/11/28(土) 20:22:46.29ID:Sl4N7Gov AMD64やIA-32eのマニュアルに2バイトで0クリア出来るオペコードはないように見えるな
934デフォルトの名無しさん
2020/11/28(土) 20:23:26.87ID:kjtXSxRe if !vAddress
{
VarSetCapacity(MEMORY_BASIC_INFORMATION, A_PtrSize=8?48:28, 0)
vAddress := 0
Loop
{
if !DllCall("kernel32\VirtualQueryEx", Ptr,hProc, Ptr,vAddress, Ptr,&MEMORY_BASIC_INFORMATION, UPtr,A_PtrSize=8?48:28, UPtr)
break
vMbiBaseAddress := NumGet(MEMORY_BASIC_INFORMATION, 0, "Ptr")
vMbiRegionSize := NumGet(MEMORY_BASIC_INFORMATION, A_PtrSize=8?24:12, "UPtr")
vMbiState := NumGet(MEMORY_BASIC_INFORMATION, A_PtrSize=8?32:16, "UInt")
;vMbiProtect := NumGet(MEMORY_BASIC_INFORMATION, A_PtrSize=8?36:20, "UInt")
vMbiType := NumGet(MEMORY_BASIC_INFORMATION, A_PtrSize=8?40:24, "UInt")
vName := ""
if (vMbiState & 0x1000) ;MEM_COMMIT := 0x1000
&& (vMbiType & 0x1000000) ;MEM_IMAGE := 0x1000000
;&& (vMbiProtect = 0x4) ;PAGE_READWRITE := 0x4
{
vPath := ""
VarSetCapacity(vPath, MAX_PATH*2)
DllCall("psapi\GetMappedFileName", Ptr,hProc, Ptr,vMbiBaseAddress, Str,vPath, UInt,MAX_PATH*2, UInt)
if !(vPath = "")
SplitPath, vPath, vName
}
{
VarSetCapacity(MEMORY_BASIC_INFORMATION, A_PtrSize=8?48:28, 0)
vAddress := 0
Loop
{
if !DllCall("kernel32\VirtualQueryEx", Ptr,hProc, Ptr,vAddress, Ptr,&MEMORY_BASIC_INFORMATION, UPtr,A_PtrSize=8?48:28, UPtr)
break
vMbiBaseAddress := NumGet(MEMORY_BASIC_INFORMATION, 0, "Ptr")
vMbiRegionSize := NumGet(MEMORY_BASIC_INFORMATION, A_PtrSize=8?24:12, "UPtr")
vMbiState := NumGet(MEMORY_BASIC_INFORMATION, A_PtrSize=8?32:16, "UInt")
;vMbiProtect := NumGet(MEMORY_BASIC_INFORMATION, A_PtrSize=8?36:20, "UInt")
vMbiType := NumGet(MEMORY_BASIC_INFORMATION, A_PtrSize=8?40:24, "UInt")
vName := ""
if (vMbiState & 0x1000) ;MEM_COMMIT := 0x1000
&& (vMbiType & 0x1000000) ;MEM_IMAGE := 0x1000000
;&& (vMbiProtect = 0x4) ;PAGE_READWRITE := 0x4
{
vPath := ""
VarSetCapacity(vPath, MAX_PATH*2)
DllCall("psapi\GetMappedFileName", Ptr,hProc, Ptr,vMbiBaseAddress, Str,vPath, UInt,MAX_PATH*2, UInt)
if !(vPath = "")
SplitPath, vPath, vName
}
935デフォルトの名無しさん
2020/11/28(土) 20:25:32.47ID:kjtXSxRe if InStr(vName, "AcroRd32.dll")
{
;get address where path starts
;if vPIs64{
; vAddress := vMbiBaseAddress + 0x19d3d9c
;}
;else{
vAddress := vMbiBaseAddress + 0x19d3d9c
;}
break
}
vAddress += vMbiRegionSize
if 0
if (vAddress > 2**32-1) ;4 gigabytes
{
DllCall("kernel32\CloseHandle", Ptr,hProc)
return
}
}
}
{
;get address where path starts
;if vPIs64{
; vAddress := vMbiBaseAddress + 0x19d3d9c
;}
;else{
vAddress := vMbiBaseAddress + 0x19d3d9c
;}
break
}
vAddress += vMbiRegionSize
if 0
if (vAddress > 2**32-1) ;4 gigabytes
{
DllCall("kernel32\CloseHandle", Ptr,hProc)
return
}
}
}
936デフォルトの名無しさん
2020/11/28(土) 20:26:33.51ID:kjtXSxRe VarSetCapacity(MEMORY_BASIC_INFORMATION, A_PtrSize=8?48:28, 0)
if vAddress
&& DllCall("kernel32\VirtualQueryEx", Ptr,hProc, Ptr,vMbiBaseAddress, Ptr,&MEMORY_BASIC_INFORMATION, UPtr,A_PtrSize=8?48:28, UPtr)
{
memVal := ReadMemory32(vAddress, 0, vPID)
memVal := ReadMemory32(memVal, 0x78, vPID)
memVal := ReadMemory32(memVal, 0x18, vPID)
memVal := ReadMemory32(memVal, 0x10, vPID)
memVal := ReadMemory32(memVal, 0x10, vPID)
;memVal += 0x0
vPath := ""
VarSetCapacity(vPath, MAX_PATH*2)
DllCall("psapi\GetMappedFileName", Ptr,hProc, Ptr,vMbiBaseAddress, Str,vPath, UInt,MAX_PATH*2, UInt)
if InStr(vPath, "AcroRd32.dll")
{
vPath2 := ""
VarSetCapacity(vPath2, MAX_PATH*2, 0)
DllCall("ReadProcessMemory", "UInt", hProc, UInt, memVal, Str, vPath2, Uint, MAX_PATH*2, UPtr,0)
vPath3 := StrGet(&vPath2, "cp932")
}
}
DllCall("kernel32\CloseHandle", Ptr, hProc)
return vPath3
}
if vAddress
&& DllCall("kernel32\VirtualQueryEx", Ptr,hProc, Ptr,vMbiBaseAddress, Ptr,&MEMORY_BASIC_INFORMATION, UPtr,A_PtrSize=8?48:28, UPtr)
{
memVal := ReadMemory32(vAddress, 0, vPID)
memVal := ReadMemory32(memVal, 0x78, vPID)
memVal := ReadMemory32(memVal, 0x18, vPID)
memVal := ReadMemory32(memVal, 0x10, vPID)
memVal := ReadMemory32(memVal, 0x10, vPID)
;memVal += 0x0
vPath := ""
VarSetCapacity(vPath, MAX_PATH*2)
DllCall("psapi\GetMappedFileName", Ptr,hProc, Ptr,vMbiBaseAddress, Str,vPath, UInt,MAX_PATH*2, UInt)
if InStr(vPath, "AcroRd32.dll")
{
vPath2 := ""
VarSetCapacity(vPath2, MAX_PATH*2, 0)
DllCall("ReadProcessMemory", "UInt", hProc, UInt, memVal, Str, vPath2, Uint, MAX_PATH*2, UPtr,0)
vPath3 := StrGet(&vPath2, "cp932")
}
}
DllCall("kernel32\CloseHandle", Ptr, hProc)
return vPath3
}
937デフォルトの名無しさん
2020/11/28(土) 20:28:28.40ID:kjtXSxRe ReadMemory32(MADDRESS, pOffset = 0, activePID := 0)
{
VarSetCapacity(MVALUE,8)
ProcessHandle := DllCall("OpenProcess", "Int", 24, "Char", 0, "UInt", activePID, "UInt")
lastErr := DllCall("GetLastError")
DllCall("ReadProcessMemory", "UInt", ProcessHandle, "UInt", MADDRESS+pOffset, "Str", MVALUE, "Uint",8, "Uint *",0)
DllCall("CloseHandle", "int", ProcessHandle)
result := 0
Loop 4{
result += *(&MVALUE + A_Index-1) << 8*(A_Index-1)
}
return result
}
{
VarSetCapacity(MVALUE,8)
ProcessHandle := DllCall("OpenProcess", "Int", 24, "Char", 0, "UInt", activePID, "UInt")
lastErr := DllCall("GetLastError")
DllCall("ReadProcessMemory", "UInt", ProcessHandle, "UInt", MADDRESS+pOffset, "Str", MVALUE, "Uint",8, "Uint *",0)
DllCall("CloseHandle", "int", ProcessHandle)
result := 0
Loop 4{
result += *(&MVALUE + A_Index-1) << 8*(A_Index-1)
}
return result
}
938デフォルトの名無しさん
2020/11/29(日) 13:50:46.99ID:tmDS9Mir939デフォルトの名無しさん
2020/11/29(日) 13:51:20.22ID:tmDS9Mir AutoHotKeyか。
940デフォルトの名無しさん
2020/11/29(日) 15:27:25.94ID:g07v1NN9941デフォルトの名無しさん
2020/11/29(日) 15:41:01.10ID:tmDS9Mir942デフォルトの名無しさん
2020/11/29(日) 15:50:37.08ID:sV/hNKwx x86で該当しそうなのはmovzx movsxくらいだけどな。
movzx ax,0
でオペランド含めて
OF B6 00
の3バイト。
xor ax,axが1バイトというのはオペランドを含まないならそうかもしれんな。
mov ax,0がオペランド込みで2バイトのコードがあるなら教えてほしい。
movzx ax,0
でオペランド含めて
OF B6 00
の3バイト。
xor ax,axが1バイトというのはオペランドを含まないならそうかもしれんな。
mov ax,0がオペランド込みで2バイトのコードがあるなら教えてほしい。
943デフォルトの名無しさん
2020/11/29(日) 16:30:48.26ID:tmDS9Mir >>942
8BIT測値を16/32BITに拡張する「即値拡張」なる形式が、add,sub,or,xor,and
adc,sbb,cmp や、push,imul には存在しているが、mov命令には存在してないようだ。
8BIT測値を16/32BITに拡張する「即値拡張」なる形式が、add,sub,or,xor,and
adc,sbb,cmp や、push,imul には存在しているが、mov命令には存在してないようだ。
944デフォルトの名無しさん
2020/11/29(日) 19:36:03.18ID:g07v1NN9 >>941
AcrobatReaderのウィンドウハンドルを渡して、アクティブタブのファイルパス
が返ってくる関数ですよー。
F1::
;F1を押したら
;アクティブウィンドウハンドルの取得(AcrobatReaderをアクティブにしといてください)
hwnd := WinExist("A")
;アクティブタブのファイルパスを取得
filePath := JEE_GetAcroRd32Path(hwnd)
;メッセージボックスで表示
MsgBox, % filePath
return
こんな感じで使ってください。
AcrobatReaderのウィンドウハンドルを渡して、アクティブタブのファイルパス
が返ってくる関数ですよー。
F1::
;F1を押したら
;アクティブウィンドウハンドルの取得(AcrobatReaderをアクティブにしといてください)
hwnd := WinExist("A")
;アクティブタブのファイルパスを取得
filePath := JEE_GetAcroRd32Path(hwnd)
;メッセージボックスで表示
MsgBox, % filePath
return
こんな感じで使ってください。
945デフォルトの名無しさん
2020/11/30(月) 06:36:20.46ID:jVClAyvr ここそういうスレだっけ?
946デフォルトの名無しさん
2020/11/30(月) 15:37:02.85ID:SYaCp1kg スレチすまそ
947デフォルトの名無しさん
2020/11/30(月) 21:26:57.27ID:aenc2Jvq どうせ過疎ってんだからいいだろ
948デフォルトの名無しさん
2020/12/01(火) 01:21:53.10ID:QGlkeoFk え?なんで?
949デフォルトの名無しさん
2020/12/01(火) 14:57:54.27ID:hTz4hSGC 誰も何も書かなきゃ落ちるから
950デフォルトの名無しさん
2020/12/01(火) 15:06:31.69ID:5apuVehD それでも関係ないこと書くのは違うな
951デフォルトの名無しさん
2020/12/01(火) 15:45:01.61ID:hTz4hSGC じゃあきみが頑張って書いてスレを維持してくれ
952デフォルトの名無しさん
2020/12/01(火) 20:53:32.04ID:QGlkeoFk 人がいないスレをわざわざ上げる必要ないので
関係ない話なら他の上がっているスレに書けばいいだろ
関係ない話なら他の上がっているスレに書けばいいだろ
953デフォルトの名無しさん
2020/12/12(土) 05:38:07.46ID:0YPrQOFp ほしゆ(・ω・)
954デフォルトの名無しさん
2020/12/12(土) 17:19:41.14ID:YnqZkJbK あーあ、誰も書かなくなったw 落ちるぞ
955デフォルトの名無しさん
2020/12/13(日) 02:46:51.94ID:46vi4xSP 素朴な思い付きの疑問なのだけど、どうして書籍としてAMD64の入門書が無いの?
需要も知識ある人も、それなりに居そうだけど。
まさか、AMDから許可がおりないとか?
需要も知識ある人も、それなりに居そうだけど。
まさか、AMDから許可がおりないとか?
956デフォルトの名無しさん
2020/12/13(日) 06:59:00.79ID:5t0HrIYx ほしゆ(・ω・)
957デフォルトの名無しさん
2020/12/13(日) 15:57:52.04ID:+kVWWkIy >>955
書けば売れるんじゃね
書けば売れるんじゃね
958デフォルトの名無しさん
2020/12/13(日) 17:46:48.41ID:tEItIdi/ >>955
「図解64ビットがわかる (図解 知りたい!テクノロジー)」でググれ
「図解64ビットがわかる (図解 知りたい!テクノロジー)」でググれ
959955
2020/12/14(月) 05:46:00.53ID:lPWXZq4e960デフォルトの名無しさん
2020/12/14(月) 09:33:35.43ID:7ZAWu3kI >>958
この人の本ってプログラミングに役立つん?
この人の本ってプログラミングに役立つん?
961デフォルトの名無しさん
2020/12/14(月) 15:32:42.23ID:7+Opk3xu 普通に考えてAMDやIntelが公開している最適化マニュアル等の方が役立つ
962デフォルトの名無しさん
2020/12/14(月) 17:48:08.53ID:yiGrKys0963デフォルトの名無しさん
2020/12/15(火) 23:33:29.39ID:JKngFzP4 64bitアセンブラの本もあるじゃないか
「64ビットアセンブラ入門―64ビットCPUの基本構造もやさしく解説」 (Amazon)
「64ビットアセンブラ入門―64ビットCPUの基本構造もやさしく解説」 (Amazon)
964デフォルトの名無しさん
2020/12/16(水) 08:28:24.95ID:4AurUS4h アセンブラは、C のポインタで躓かないように
Z80 程度を少し (もちろんポインタを使う程度) やればいいと思う。
Z80 程度を少し (もちろんポインタを使う程度) やればいいと思う。
965デフォルトの名無しさん
2020/12/16(水) 11:53:24.15ID:2Jfp/ir2 アセンブラやるのにアーキテクチャやCが必要なのかな?
966デフォルトの名無しさん
2020/12/16(水) 19:53:44.68ID:xpVb4SZu >>965
各種レジスタ構成やそれらの性質、仮想記憶のしくみなどを知らずにアセンブラやろうとするのは無謀もいいとこだろう。
Cで書いたコードの一部をアセンブラに書き換えて変更したり最適化するとき、Cのコードに対応するアセンブラソースが
どうなっているか見るにはCで何をしようとしているかわからないと話にならないだろう。
こういうことは知ってて損することはない。
各種レジスタ構成やそれらの性質、仮想記憶のしくみなどを知らずにアセンブラやろうとするのは無謀もいいとこだろう。
Cで書いたコードの一部をアセンブラに書き換えて変更したり最適化するとき、Cのコードに対応するアセンブラソースが
どうなっているか見るにはCで何をしようとしているかわからないと話にならないだろう。
こういうことは知ってて損することはない。
967デフォルトの名無しさん
2020/12/19(土) 08:32:12.96ID:SL5FUo+H >>963
その本、Cから呼び出す前提だったから、アセンブラでの変数宣言の仕方は載ってない。
その本、Cから呼び出す前提だったから、アセンブラでの変数宣言の仕方は載ってない。
968デフォルトの名無しさん
2020/12/19(土) 19:14:03.47ID:wFrehAp+969デフォルトの名無しさん
2020/12/19(土) 20:11:53.26ID:TfP5rB1Q CD21 を学習しないとなw
970デフォルトの名無しさん
2020/12/19(土) 21:14:42.16ID:61b7WmYd Cが先か?アセンブラが先か?
971デフォルトの名無しさん
2020/12/20(日) 04:41:50.25ID:mOcnJILL >>970
Cコンパイラが生成したアセンブラよく読んだよ
Cコンパイラが生成したアセンブラよく読んだよ
972デフォルトの名無しさん
2020/12/20(日) 12:47:01.51ID:NmAfNXJq >>967
int some_data = 5;
という変数は、アセンブラでは以下のようにすると定義できる:
_DATA segment DWORD
_some_data dd 5
_DATA ends
dd は、define dword の意味。db だと byte, dw だと word、となる。
構造体の場合は、struc を使うか、または、メンバのdd,dw,dbをそのまま並べる。
自動 align はされないので、alignment をとりたい場合は、自分で pading するか、
align 擬似命令か、even 擬似命令を使う。
int some_data = 5;
という変数は、アセンブラでは以下のようにすると定義できる:
_DATA segment DWORD
_some_data dd 5
_DATA ends
dd は、define dword の意味。db だと byte, dw だと word、となる。
構造体の場合は、struc を使うか、または、メンバのdd,dw,dbをそのまま並べる。
自動 align はされないので、alignment をとりたい場合は、自分で pading するか、
align 擬似命令か、even 擬似命令を使う。
973デフォルトの名無しさん
2020/12/20(日) 12:48:36.41ID:NmAfNXJq _DATA segment DWORD
の部分の DWORD は、そのセグメントの先頭を、DWORD でアラインする、という
意味。つまり、セグメントの先頭アドレスが 4 の倍数に配置される。
省略も可能。
アラインメントをしなくてもプログラムは動くが、少し遅くなることが有る。
の部分の DWORD は、そのセグメントの先頭を、DWORD でアラインする、という
意味。つまり、セグメントの先頭アドレスが 4 の倍数に配置される。
省略も可能。
アラインメントをしなくてもプログラムは動くが、少し遅くなることが有る。
974デフォルトの名無しさん
2020/12/21(月) 08:58:26.80ID:LKkS73pR >>973
いやいや、bus errorでしょもう。
いやいや、bus errorでしょもう。
975デフォルトの名無しさん
2020/12/21(月) 11:00:51.03ID:i3HSzHFO 今時のISAはアライメントズレでロード/ストアした場合でも遅くなるだけじゃね
IA32、AMD64、ARM、RX、RISC-V
あたりはアライメントがずれていても例外は吐かないように見える
IA32、AMD64、ARM、RX、RISC-V
あたりはアライメントがずれていても例外は吐かないように見える
976デフォルトの名無しさん
2020/12/21(月) 13:34:54.19ID:xeeueWnS977デフォルトの名無しさん
2020/12/21(月) 13:38:38.63ID:xeeueWnS 構造体メンバのアラインメントも、x86, AMD64 では速度面以外では必要ではない。
他の系統のCPUでは、アラインメントが揃ってないと読み込めない様になっている
ことがあるが、x86, AMD64 の人から見ると、そういったCPUに足をひきづられて
ウザイことがある。
そういうCPUのために、x86, x64 では不要の構造体のアラインメントなどウルサすぎる。
他の系統のCPUでは、アラインメントが揃ってないと読み込めない様になっている
ことがあるが、x86, AMD64 の人から見ると、そういったCPUに足をひきづられて
ウザイことがある。
そういうCPUのために、x86, x64 では不要の構造体のアラインメントなどウルサすぎる。
978デフォルトの名無しさん
2020/12/21(月) 14:24:05.05ID:xeeueWnS 構造体メンバのアラインは、x86、x64でも速度のために有ったほうが良いかも
知れないが、バイナリファイルの中の32BIT整数の部分をアラインするのは、
ちょっと抵抗を感じることがある。
ファイルの場合、読み込み速度よりサイズの小ささが重要だと思うので。
他のCPUでは読み込めないなら、そのCPUの設計が欠陥だとも考えられるし、
そんなCPUの事まで配慮してサイズが増大するのはいい迷惑。
知れないが、バイナリファイルの中の32BIT整数の部分をアラインするのは、
ちょっと抵抗を感じることがある。
ファイルの場合、読み込み速度よりサイズの小ささが重要だと思うので。
他のCPUでは読み込めないなら、そのCPUの設計が欠陥だとも考えられるし、
そんなCPUの事まで配慮してサイズが増大するのはいい迷惑。
979デフォルトの名無しさん
2020/12/21(月) 17:07:46.38ID:GZaqA6YK バイナリファイル解析してるとアライン考慮部分と全く配慮してないが混在されてるのがまれによくある
980デフォルトの名無しさん
2020/12/21(月) 19:28:27.84ID:LKkS73pR アライメントなんかアセンブルディレクティブ疑似命令で自動でやってくれるでしょ.sizeofとかもアライメント考慮してサイズ返してくれるし。
コンパイラが再生するデータ構造はアライメント合わせされてる。x86でオプティマイズサイズだとされないか。
コンパイラが再生するデータ構造はアライメント合わせされてる。x86でオプティマイズサイズだとされないか。
981デフォルトの名無しさん
2020/12/21(月) 20:01:53.70ID:Ttyv2kNo 高性能PC!!
を謳ってる配信でintelが全く見当たらなくなったのは隔世の感があるな。
配信してる超絶プログラマさんももうAMDしか選択肢がない言うてた
を謳ってる配信でintelが全く見当たらなくなったのは隔世の感があるな。
配信してる超絶プログラマさんももうAMDしか選択肢がない言うてた
982デフォルトの名無しさん
2020/12/22(火) 00:21:52.28ID:tgdJRQi2 IA64やらずに超絶とは
983デフォルトの名無しさん
2020/12/22(火) 00:42:43.81ID:btWe0I+s IA64はお亡くなりになられたよ・・・
984デフォルトの名無しさん
2020/12/22(火) 11:00:09.36ID:kzqT97dS PS5はAMDなんだな
985デフォルトの名無しさん
2020/12/30(水) 01:28:02.70ID:ojaVEyJL ほしゆ(・ω・)
986デフォルトの名無しさん
2020/12/31(木) 08:09:56.84ID:qAEGulJg >>979
まれにあるのか?よくあることなのか?どっちでもいいが
まれにあるのか?よくあることなのか?どっちでもいいが
987デフォルトの名無しさん
2020/12/31(木) 12:53:32.07ID:pMMrEBim >>986
掲示板初心者か?
掲示板初心者か?
988デフォルトの名無しさん
2021/01/01(金) 08:45:04.14ID:ZYHKNI/v ・
989デフォルトの名無しさん
2021/01/01(金) 09:25:56.97ID:Sutdgdij 初心者スレで上級者気取りか?
990デフォルトの名無しさん
2021/01/01(金) 18:12:38.86ID:ADEdjdIz ・
991デフォルトの名無しさん
2021/01/01(金) 19:03:44.66ID:sqmHJxPF ほしゆ(・ω・)
992デフォルトの名無しさん
2021/01/01(金) 20:06:32.68ID:9XtueUbf いやもう次立てる所やろ
993デフォルトの名無しさん
2021/01/02(土) 07:31:18.88ID:wg370Djj ・
994デフォルトの名無しさん
2021/01/02(土) 18:03:52.31ID:kSzgq5SE ・
995デフォルトの名無しさん
2021/01/03(日) 06:33:21.26ID:qiwWktFe ・
996デフォルトの名無しさん
2021/01/03(日) 18:36:17.00ID:GJkrCLRp まもなくここは 乂1000取り合戦場乂 となります。
\∧_ヘ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
,,、,、,,, / \〇ノゝ∩ < 1000取り合戦、いくぞゴルァ!! ,,、,、,,,
/三√ ゚Д゚) / \____________ ,,、,、,,,
/三/| ゚U゚|\ ,,、,、,,, ,,、,、,,,
,,、,、,,, U (:::::::::::) ,,、,、,,, \オーーーーーーーッ!!/
//三/|三|\ ∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
∪ ∪ ( ) ( ) ( ) )
,,、,、,,, ,,、,、,,, ∧_∧∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
,,、,、,,, ( ) ( ) ( ) ( )
\∧_ヘ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
,,、,、,,, / \〇ノゝ∩ < 1000取り合戦、いくぞゴルァ!! ,,、,、,,,
/三√ ゚Д゚) / \____________ ,,、,、,,,
/三/| ゚U゚|\ ,,、,、,,, ,,、,、,,,
,,、,、,,, U (:::::::::::) ,,、,、,,, \オーーーーーーーッ!!/
//三/|三|\ ∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
∪ ∪ ( ) ( ) ( ) )
,,、,、,,, ,,、,、,,, ∧_∧∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
,,、,、,,, ( ) ( ) ( ) ( )
997デフォルトの名無しさん
2021/01/04(月) 06:34:03.38ID:se2ZF3ue ・
998デフォルトの名無しさん
2021/01/04(月) 17:11:09.20ID:4XmqFvVy ・
999デフォルトの名無しさん
2021/01/04(月) 17:11:25.37ID:4XmqFvVy ・
1000デフォルトの名無しさん
2021/01/04(月) 17:11:46.52ID:4XmqFvVy --- 終了 ---
10011001
Over 1000Thread このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 1361日 23時間 35分 51秒
新しいスレッドを立ててください。
life time: 1361日 23時間 35分 51秒
レス数が1000を超えています。これ以上書き込みはできません。
ニュース
- 「おこめ券は米以外の食品も買える。効果的な活用を」 地元で農水相 [山形県] [少考さん★]
- 【速報】「女芸人No.1決定戦 THE W」9代目女王にニッチェ! 7年ぶり3度目で悲願の優勝 [牛丼★]
- 【芸能】『女芸人No.1決定戦THE W』 粗品が最後にバッサリ「優勝賞金1000万円にしてはレベル低い大会」 [冬月記者★]
- 【沖縄】開業4ヵ月でこれは…“国民の税金”投入の『ジャングリア沖縄』で見た衝撃的な光景と、モチベーションが低い一部スタッフの現状 [ぐれ★]
- 【東京】「家族で話題にして」 “世田谷一家殺害から25年 警視庁が呼びかけ [煮卵★]
- 今年の流行語大賞 『働いて働いて働いてまいります』が受賞で不快感… 過労自殺の遺族らが会見「家族にむち打つような行為だ」 [冬月記者★]
- 焼き芋を輪切りにして天ぷらにすると美味しいよ
- あまり名前を呼ばない方がいい例のあの人が復活したらしいぞ
- プロレスラーってロープに振ると走って戻ってくるけど
- クズ「勉強頑張らなかった奴は一生DQNと一緒に肉体労働しろ」☚勉強頑張れるのも環境と巡り合わせなんだが? [783475554]
- 前駐中国大使・垂秀夫『高市首相が台湾有事答弁を国会でしてしまったのは高市首相のなかに戦略的思考が無いから。安倍晋三を見習え』 [718678614]
- 個人事業主来てくれ
