1

私は英語が苦手なので、英語の問題はご容赦ください。

Windows7のRuby1.9.2でAptanaStudio3を使用しています。Win32memcpyを使用してrubyデバッガーの共有メモリから文字列データを取得しようとすると、この問題が発生します。

# encoding: utf-8
require 'windows/file_mapping'
require 'windows/msvcrt/buffer'
require 'windows/handle'

include Windows::FileMapping
include Windows::MSVCRT::Buffer
include Windows::Handle

buf1 = 0.chr * 256
@mh = OpenFileMapping(FILE_MAP_ALL_ACCESS, false, "TAG_NAME")
@address = MapViewOfFile(@mh, FILE_MAP_ALL_ACCESS, 0, 0, 0)
memcpy(buf1, @address, 256)
UnmapViewOfFile(@address)
CloseHandle(@mh)

puts buf1.unpack("Z*")

問題は以下のとおりです

    c:/Ruby192/lib/ruby/1.9.1/syck/rubytypes.rb:151:in `count'
    c:/Ruby192/lib/ruby/1.9.1/syck/rubytypes.rb:151:in `is_binary_data?'
    C:/Users/Zenbook/SkyDrive/AptanaStudio/workspace/best_practice/test.rb:19:in `<top (required)>'
    c:/Ruby192/lib/ruby/gems/1.9.1/gems/ruby-debug-ide-0.4.16/lib/ruby-debug-ide.rb:112:in `debug_load'
    c:/Ruby192/lib/ruby/gems/1.9.1/gems/ruby-debug-ide-0.4.16/lib/ruby-debug-ide.rb:112:in `debug_program'
    c:/Ruby192/lib/ruby/gems/1.9.1/gems/ruby-debug-ide-0.4.16/bin/rdebug-ide:87:in `<top (required)>'
    c:/Ruby192/bin/rdebug-ide:19:in `load'
    c:/Ruby192/bin/rdebug-ide:19:in `<main>'
Uncaught exception: invalid byte sequence in US-ASCII

memcpyの後にブレークポイントを使用しない場合、または文字列の長さのみを取得する場合は発生しません。つまり、char文字列のサイズが256、char文字列の長さが12で、12バイトを取得した場合、問題は発生しません。

これは、デバッガが初期化されていない場所を含むchar文字列からテキストを読み取れないためだと思います。

したがって、エラーを無視するか、文字列に無効なテキストを含めることを許可します。誰か助けてくれませんか?

4

0 に答える 0