Merge pull request #661 from lowlyw/ruby_binding_fix

fix signedness issue with reg read/write in ruby bindings
This commit is contained in:
Nguyen Anh Quynh 2016-11-02 15:58:59 +08:00 committed by GitHub
commit d46911d301

View file

@ -73,11 +73,11 @@ VALUE m_uc_emu_start(int argc, VALUE* argv, VALUE self){
Data_Get_Struct(rb_iv_get(self,"@uch"), uc_engine, _uc); Data_Get_Struct(rb_iv_get(self,"@uch"), uc_engine, _uc);
rb_scan_args(argc, argv, "22",&begin, &until, &timeout, &count); rb_scan_args(argc, argv, "22",&begin, &until, &timeout, &count);
if (NIL_P(timeout)) if (NIL_P(timeout))
timeout = INT2NUM(0); timeout = INT2NUM(0);
if (NIL_P(count)) if (NIL_P(count))
count = INT2NUM(0); count = INT2NUM(0);
err = uc_emu_start(_uc, NUM2ULL(begin), NUM2ULL(until), NUM2INT(timeout), NUM2INT(count)); err = uc_emu_start(_uc, NUM2ULL(begin), NUM2ULL(until), NUM2INT(timeout), NUM2INT(count));
if (err != UC_ERR_OK) { if (err != UC_ERR_OK) {
@ -133,7 +133,7 @@ VALUE m_uc_reg_read(VALUE self, VALUE reg_id){
if (err != UC_ERR_OK) { if (err != UC_ERR_OK) {
rb_raise(UcError, "%s", uc_strerror(err)); rb_raise(UcError, "%s", uc_strerror(err));
} }
return LL2NUM(reg_value); return ULL2NUM(reg_value);
} }
} }
@ -165,7 +165,7 @@ VALUE m_uc_reg_write(VALUE self, VALUE reg_id, VALUE reg_value){
err = uc_reg_write(_uc, NUM2INT(reg_id), &tmp); err = uc_reg_write(_uc, NUM2INT(reg_id), &tmp);
break; break;
} }
if (err != UC_ERR_OK) { if (err != UC_ERR_OK) {
rb_raise(UcError, "%s", uc_strerror(err)); rb_raise(UcError, "%s", uc_strerror(err));
} }
@ -205,8 +205,8 @@ VALUE m_uc_mem_map(int argc, VALUE* argv, VALUE self){
uc_engine *_uc; uc_engine *_uc;
Data_Get_Struct(rb_iv_get(self,"@uch"), uc_engine, _uc); Data_Get_Struct(rb_iv_get(self,"@uch"), uc_engine, _uc);
rb_scan_args(argc, argv, "21",&address, &size, &perms); rb_scan_args(argc, argv, "21",&address, &size, &perms);
if (NIL_P(perms)) if (NIL_P(perms))
perms = INT2NUM(UC_PROT_ALL); perms = INT2NUM(UC_PROT_ALL);
err = uc_mem_map(_uc, NUM2ULL(address), NUM2UINT(size), NUM2UINT(perms)); err = uc_mem_map(_uc, NUM2ULL(address), NUM2UINT(size), NUM2UINT(perms));
if (err != UC_ERR_OK) { if (err != UC_ERR_OK) {
@ -332,14 +332,14 @@ VALUE m_uc_hook_add(int argc, VALUE* argv, VALUE self){
uc_engine *_uc; uc_engine *_uc;
Data_Get_Struct(rb_iv_get(self,"@uch"), uc_engine, _uc); Data_Get_Struct(rb_iv_get(self,"@uch"), uc_engine, _uc);
rb_scan_args(argc, argv, "24",&hook_type, &callback, &user_data, &begin, &end, &arg1); rb_scan_args(argc, argv, "24",&hook_type, &callback, &user_data, &begin, &end, &arg1);
if (NIL_P(begin)) if (NIL_P(begin))
begin = ULL2NUM(1); begin = ULL2NUM(1);
if (NIL_P(end)) if (NIL_P(end))
end = ULL2NUM(0); end = ULL2NUM(0);
if (NIL_P(arg1)) if (NIL_P(arg1))
arg1 = INT2NUM(0); arg1 = INT2NUM(0);
VALUE passthrough; VALUE passthrough;
uc_hook trace; uc_hook trace;
@ -374,12 +374,12 @@ VALUE m_uc_hook_add(int argc, VALUE* argv, VALUE self){
else if(htype == UC_HOOK_CODE || htype == UC_HOOK_BLOCK){ else if(htype == UC_HOOK_CODE || htype == UC_HOOK_BLOCK){
err = uc_hook_add(_uc, &trace, htype, cb_hook_code,(void *)passthrough, NUM2ULL(begin), NUM2ULL(end)); err = uc_hook_add(_uc, &trace, htype, cb_hook_code,(void *)passthrough, NUM2ULL(begin), NUM2ULL(end));
} }
else if (htype & UC_HOOK_MEM_READ_UNMAPPED else if (htype & UC_HOOK_MEM_READ_UNMAPPED
|| htype & UC_HOOK_MEM_WRITE_UNMAPPED || htype & UC_HOOK_MEM_WRITE_UNMAPPED
|| htype & UC_HOOK_MEM_FETCH_UNMAPPED || htype & UC_HOOK_MEM_FETCH_UNMAPPED
|| htype & UC_HOOK_MEM_READ_PROT || htype & UC_HOOK_MEM_READ_PROT
|| htype & UC_HOOK_MEM_WRITE_PROT || htype & UC_HOOK_MEM_WRITE_PROT
|| htype & UC_HOOK_MEM_FETCH_PROT || htype & UC_HOOK_MEM_FETCH_PROT
|| htype & UC_HOOK_MEM_READ_INVALID || htype & UC_HOOK_MEM_READ_INVALID
|| htype & UC_HOOK_MEM_WRITE_INVALID || htype & UC_HOOK_MEM_WRITE_INVALID
|| htype & UC_HOOK_MEM_FETCH_INVALID || htype & UC_HOOK_MEM_FETCH_INVALID
@ -387,7 +387,7 @@ VALUE m_uc_hook_add(int argc, VALUE* argv, VALUE self){
|| htype & UC_HOOK_MEM_PROT || htype & UC_HOOK_MEM_PROT
|| htype & UC_HOOK_MEM_INVALID) { || htype & UC_HOOK_MEM_INVALID) {
err = uc_hook_add(_uc, &trace, htype, cb_hook_mem_invalid,(void *)passthrough, NUM2ULL(begin), NUM2ULL(end)); err = uc_hook_add(_uc, &trace, htype, cb_hook_mem_invalid,(void *)passthrough, NUM2ULL(begin), NUM2ULL(end));
} }
else{ else{
err = uc_hook_add(_uc, &trace, htype, cb_hook_mem_access,(void *)passthrough, NUM2ULL(begin), NUM2ULL(end)); err = uc_hook_add(_uc, &trace, htype, cb_hook_mem_access,(void *)passthrough, NUM2ULL(begin), NUM2ULL(end));
} }