HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0402
ニボッシーバイナリ形式の特定のアドレスの書き換え4解決


ニボッシー

リンク

2015/4/2(Thu) 21:07:59|NO.68330

バイナリ形式の特定のアドレスの書き換えがしたいのです。
lpeekやlpokeなどを使って書き換えることは分かったのですが、
これだと指定のbyte単位でのインデックスの読み出ししか出来ません。
バイナリエディタのような00006F00かんじのアドレス形式で
読み書きすることは出来ないでしょうか?



この記事に返信する


cats

リンク

2015/4/2(Thu) 21:10:50|NO.68331

指定アドレスのデータを書き換えるということなら、peekとpokeでできると思うのですが。

buf = "0123456789ABCDEF" mes buf poke buf, 0xA, 0x20 mes buf
lpokeやwpokeも使うのならエンディアンに注意してください。



ニボッシー

リンク

2015/4/2(Thu) 22:21:25|NO.68337

>catsさん
回答有難うございます。
ソースを参考にいじって0xアドレス形式で書き換え出来るのを確認しました。

ただ今回pokeなどの命令を使うのがはじめてでまだよく理解できていないのですが、
例えば、bloadでファイルを読み込みアドレスの00000020をFFに書き換えする場合
これだとエラーになりました。
wpokeでオーバーバッファーフローを起こしてしまうのですが使い方間違っているでしょうか?
data.datは50kb程度の容量です。


FileName="data.dat" exist FileName : FileSize=strsize bload FileName,temp,FileSize wpoke temp,0x20,65535



cats

リンク

2015/4/2(Thu) 23:00:28|NO.68338

そのコードではtempが整数になり4バイトしか確保できていません。

sdim temp, FileSize
これでファイルサイズ分の領域を確保してください。
bloadはnoteload系とは違い自動でファイルサイズ分確保しないので、オーバーフローに注意が必要です。

ちなみに、wpokeは2バイトで、例えば0xFFEEを書き込んだ場合、メモリ上では
0xEE 0xFF
という並びになるのが分かると思います。(HSPのデバッガでメモリダンプを指定すると簡単に見ることができます。)
これはWindowsの採用しているリトルエンディアンによるもので、例えば整数10はメモリ上では
0x0A 0x00 0x00 0x00
という並びで保存されています。
wpokeやlpoke, pokeを混合して使用すると間違えやすいので注意してください。



ニボッシー

リンク

2015/4/2(Thu) 23:11:52|NO.68339

>catsさん
いつもご回答ありがとうございます。
普段noteloadを使っているためbloadの仕様を知りませんでした。
そして非常にわかりやすい説明有り難うございました!
pokeなどの命令はすぐにオーバーフローしそうなので慎重にやっていこうと思います。



ONION software Copyright 1997-2021(c) All rights reserved.