SKIPDATA: @offset of callback function should indicate the position of examining byte in input buffer
diff --git a/cs.c b/cs.c
index ec74c50..4253880 100644
--- a/cs.c
+++ b/cs.c
@@ -382,6 +382,7 @@
return &cache[f - 1];
}
+// generate @op_str for data instruction of SKIPDATA
static void skipdata_opstr(char *opstr, const uint8_t *buffer, size_t size)
{
char *p = opstr;
@@ -417,6 +418,7 @@
bool r;
void *tmp;
size_t skipdata_bytes;
+ uint64_t offset_org;
if (!handle) {
// FIXME: how to handle this case:
@@ -431,6 +433,7 @@
memset(insn_cache, 0, sizeof(insn_cache));
+ offset_org = offset;
while (size > 0) {
MCInst_Init(&mci);
mci.csh = handle;
@@ -513,7 +516,7 @@
break;
if (handle->skipdata_setup.callback) {
- skipdata_bytes = handle->skipdata_setup.callback(offset,
+ skipdata_bytes = handle->skipdata_setup.callback(offset - offset_org,
handle->skipdata_setup.user_data);
if (skipdata_bytes > size)
// remaining data is not enough