uint32_t tmp_args[var_dump.argc];
uint32_t tmp_envs[var_dump.envc];
- PrintDebug("Initiating copy into guest (32bit)\n");
+ PrintDebug(core->vm_info, core, "Initiating copy into guest (32bit)\n");
ret = v3_gva_to_hva(core, get_addr_linear(core, gva, &(core->segments.ds)), &hva);
if (ret == -1) {
- PrintDebug("Error translating gva in v3_copy_chunk_2guest\n");
+ PrintDebug(core->vm_info, core, "Error translating gva in v3_copy_chunk_2guest\n");
return -1;
}
host_cursor -= strlen(var_dump.envp[i]) + 1;
guest_cursor -= strlen(var_dump.envp[i]) + 1;
while (i < var_dump.envc) {
- //PrintDebug("Copying envvar#%d: %s\n", i, var_dump.envp[i]);
+ //PrintDebug(core->vm_info, core, "Copying envvar#%d: %s\n", i, var_dump.envp[i]);
strcpy(host_cursor, var_dump.envp[i]);
tmp_envs[i] = guest_cursor;
i++;
host_cursor -= strlen(var_dump.argv[i]) + 1;
guest_cursor -= strlen(var_dump.argv[i]) + 1;
while (i < var_dump.argc) {
- //PrintDebug("Copying arg #%d: %s\n", i, var_dump.argv[i]);
+ //PrintDebug(core->vm_info, core, "Copying arg #%d: %s\n", i, var_dump.argv[i]);
strcpy(host_cursor, var_dump.argv[i]);
tmp_args[i] = guest_cursor;
i++;
uint_t argc = 0, envc = 0, bytes = 0;
char * cursor;
- PrintDebug("Initiating copy into vmm\n");
+ PrintDebug(core->vm_info, core, "Initiating copy into vmm\n");
int ret = v3_gva_to_hva(core, get_addr_linear(core, core->vm_regs.rdx, &(core->segments.ds)), &envp);
if (ret == -1) {
- PrintDebug("Error translating address in rdx\n");
+ PrintDebug(core->vm_info, core, "Error translating address in rdx\n");
return 0;
}
ret = v3_gva_to_hva(core, get_addr_linear(core, core->vm_regs.rcx, &(core->segments.ds)), &argv);
if (ret == -1) {
- PrintDebug("Error translating address in rcx\n");
+ PrintDebug(core->vm_info, core, "Error translating address in rcx\n");
return 0;
}
addr_t argvn;
ret = v3_gva_to_hva(core, get_addr_linear(core, (addr_t)*((uint32_t*)cursor), &(core->segments.ds)), &argvn);
if (ret == -1) {
- PrintDebug("Error translating address for argvn\n");
+ PrintDebug(core->vm_info, core, "Error translating address for argvn\n");
}
argc++;
cursor += 4;
var_dump.argv = (char**)V3_Malloc(sizeof(char*)*argc);
if (!var_dump.argv) {
- PrintError("Cannot allocate in copying\n");
+ PrintError(core->vm_info, core, "Cannot allocate in copying\n");
return -1;
}
addr_t argvn;
ret = v3_gva_to_hva(core, get_addr_linear(core, (addr_t)*((uint32_t*)cursor), &(core->segments.ds)), &argvn);
if (ret == -1) {
- PrintDebug("Error translating argvn address\n");
+ PrintDebug(core->vm_info, core, "Error translating argvn address\n");
}
/* malloc room for the string */
char * tmpstr = (char*)V3_Malloc(strlen((char*)argvn) + 1);
if (!tmpstr) {
- PrintError("Cannot allocate temporary\n");
+ PrintError(core->vm_info, core, "Cannot allocate temporary\n");
return -1;
}
var_dump.argv[i] = tmpstr;
/* copy the string */
+ // this is guaranteed to alwys null terminate tmpstr
strncpy(tmpstr, (char*)argvn, strlen((char*)argvn) + 1);
+
i++;
cursor += 4;
bytes += strlen((char*)argvn) + 1;
char * tmpstr = (char*)V3_Malloc(strlen(argstrs[j]) + 1);
if (!tmpstr) {
- PrintError("Cannot allocate temp string\n");
+ PrintError(core->vm_info, core, "Cannot allocate temp string\n");
return -1;
}
+ // will always null-terminate tmpstr
strncpy(tmpstr, argstrs[i], strlen(argstrs[j]) + 1);
var_dump.argv[i] = tmpstr;
bytes += strlen(argstrs[j]) + 1;
addr_t envpn;
ret = v3_gva_to_hva(core, get_addr_linear(core, (addr_t)*((uint32_t*)cursor), &(core->segments.ds)), &envpn);
if (ret == -1) {
- PrintDebug("Error translating address for envpn\n");
+ PrintDebug(core->vm_info, core, "Error translating address for envpn\n");
}
envc++;
cursor += 4;
var_dump.envp = (char**)V3_Malloc(sizeof(char*)*envc);
if (!var_dump.envp) {
- PrintError("Cannot allocate var dump\n");
+ PrintError(core->vm_info, core, "Cannot allocate var dump\n");
return -1;
}
addr_t envpn;
ret = v3_gva_to_hva(core, get_addr_linear(core, (addr_t)*((uint32_t*)cursor), &(core->segments.ds)), &envpn);
if (ret == -1) {
- PrintDebug("Error translating address for envpn\n");
+ PrintDebug(core->vm_info, core, "Error translating address for envpn\n");
}
/* malloc room for the string */
char * tmpstr = (char*)V3_Malloc(strlen((char*)envpn) + 1);
if (!tmpstr) {
- PrintError("Cannot allocate temp string\n");
+ PrintError(core->vm_info, core, "Cannot allocate temp string\n");
return -1;
}
var_dump.envp[i] = tmpstr;
/* deepcopy the string */
+ // will always null-terminate tmpstr
strncpy(tmpstr, (char*)envpn, strlen((char*)envpn) + 1);
i++;
cursor += 4;
char * tmpstr = (char*)V3_Malloc(strlen(envstrs[j]) + 1);
if (!tmpstr) {
- PrintError("Cannot allocate temp string\n");
+ PrintError(core->vm_info, core, "Cannot allocate temp string\n");
return -1;
}
-
+ // will always null-terminate tmpstr
strncpy(tmpstr, envstrs[j], strlen(envstrs[j]) + 1);
var_dump.envp[i] = tmpstr;
bytes += strlen(envstrs[j]) + 1;
/* copy out all of the arguments and the environment to the VMM */
if ((bytes_needed = v3_copy_chunk_vmm32(core, argstrs, envstrs, argcnt, envcnt)) == -1) {
- PrintDebug("Error copying out environment and arguments\n");
+ PrintDebug(core->vm_info, core, "Error copying out environment and arguments\n");
return -1;
}
- PrintDebug("environment successfully copied into VMM\n");
+ PrintDebug(core->vm_info, core, "environment successfully copied into VMM\n");
inject_gva = v3_prepare_guest_stack(core, bytes_needed);
if (!inject_gva) {
- PrintDebug("Not enough space on user stack\n");
+ PrintDebug(core->vm_info, core, "Not enough space on user stack\n");
return -1;
}
uint64_t tmp_args[var_dump.argc];
uint64_t tmp_envs[var_dump.envc];
- PrintDebug("Initiating copy into guest (64bit)\n");
+ PrintDebug(core->vm_info, core, "Initiating copy into guest (64bit)\n");
ret = v3_gva_to_hva(core, get_addr_linear(core, gva, &(core->segments.ds)), &hva);
if (ret == -1) {
- PrintDebug("Error translating gva in v3_copy_chunk_2guest64\n");
+ PrintDebug(core->vm_info, core, "Error translating gva in v3_copy_chunk_2guest64\n");
return -1;
}
host_cursor -= strlen(var_dump.envp[i]) + 1;
guest_cursor -= strlen(var_dump.envp[i]) + 1;
while (i < var_dump.envc) {
- //PrintDebug("Copying envvar#%d: %s\n", i, var_dump.envp[i]);
+ //PrintDebug(core->vm_info, core, "Copying envvar#%d: %s\n", i, var_dump.envp[i]);
strcpy(host_cursor, var_dump.envp[i]);
tmp_envs[i] = guest_cursor;
i++;
host_cursor -= strlen(var_dump.argv[i]) + 1;
guest_cursor -= strlen(var_dump.argv[i]) + 1;
while (i < var_dump.argc) {
- //PrintDebug("Copying arg #%d: %s\n", i, var_dump.argv[i]);
+ //PrintDebug(core->vm_info, core, "Copying arg #%d: %s\n", i, var_dump.argv[i]);
strcpy(host_cursor, var_dump.argv[i]);
tmp_args[i] = guest_cursor;
i++;
uint_t argc = 0, envc = 0, bytes = 0;
char * cursor;
- PrintDebug("Initiating copy into vmm\n");
+ PrintDebug(core->vm_info, core, "Initiating copy into vmm\n");
int ret = v3_gva_to_hva(core, get_addr_linear(core, core->vm_regs.rdx, &(core->segments.ds)), &envp);
if (ret == -1) {
- PrintDebug("Error translating address in rdx\n");
+ PrintDebug(core->vm_info, core, "Error translating address in rdx\n");
return 0;
}
ret = v3_gva_to_hva(core, get_addr_linear(core, core->vm_regs.rcx, &(core->segments.ds)), &argv);
if (ret == -1) {
- PrintDebug("Error translating address in rcx\n");
+ PrintDebug(core->vm_info, core, "Error translating address in rcx\n");
return 0;
}
addr_t argvn;
ret = v3_gva_to_hva(core, get_addr_linear(core, (addr_t)*((uint64_t*)cursor), &(core->segments.ds)), &argvn);
if (ret == -1) {
- PrintDebug("Error translating address for argvn\n");
+ PrintDebug(core->vm_info, core, "Error translating address for argvn\n");
}
argc++;
cursor += 8;
var_dump.argv = (char**)V3_Malloc(sizeof(char*)*argc);
if (!var_dump.argv) {
- PrintError("Cannot allocate var dump\n");
+ PrintError(core->vm_info, core, "Cannot allocate var dump\n");
return -1;
}
addr_t argvn;
ret = v3_gva_to_hva(core, get_addr_linear(core, (addr_t)*((uint64_t*)cursor), &(core->segments.ds)), &argvn);
if (ret == -1) {
- PrintDebug("Error translating argvn address\n");
+ PrintDebug(core->vm_info, core, "Error translating argvn address\n");
}
/* malloc room for the string */
char * tmpstr = (char*)V3_Malloc(strlen((char*)argvn) + 1);
if (!tmpstr) {
- PrintError("Cannot allocate temp string\n");
+ PrintError(core->vm_info, core, "Cannot allocate temp string\n");
return -1;
}
var_dump.argv[i] = tmpstr;
/* copy the string */
+ // will always null-terminate tmpstr
strncpy(tmpstr, (char*)argvn, strlen((char*)argvn) + 1);
i++;
cursor += 8;
char * tmpstr = (char*)V3_Malloc(strlen(argstrs[j]) + 1);
if (!tmpstr) {
- PrintError("Cannot allocate temp string\n");
+ PrintError(core->vm_info, core, "Cannot allocate temp string\n");
return -1;
}
+ // will always null-terminate tmpstr
strncpy(tmpstr, argstrs[j], strlen(argstrs[j]) + 1);
var_dump.argv[i] = tmpstr;
bytes += strlen(argstrs[j]) + 1;
addr_t envpn;
ret = v3_gva_to_hva(core, get_addr_linear(core, (addr_t)*((uint64_t*)cursor), &(core->segments.ds)), &envpn);
if (ret == -1) {
- PrintDebug("Error translating address for envpn\n");
+ PrintDebug(core->vm_info, core, "Error translating address for envpn\n");
}
envc++;
cursor += 8;
var_dump.envp = (char**)V3_Malloc(sizeof(char*)*envc);
if (!var_dump.envp) {
- PrintError("Cannot allocate var dump\n");
+ PrintError(core->vm_info, core, "Cannot allocate var dump\n");
return -1;
}
addr_t envpn;
ret = v3_gva_to_hva(core, get_addr_linear(core, (addr_t)*((uint64_t*)cursor), &(core->segments.ds)), &envpn);
if (ret == -1) {
- PrintDebug("Error translating address for envpn\n");
+ PrintDebug(core->vm_info, core, "Error translating address for envpn\n");
}
/* malloc room for the string */
char * tmpstr = (char*)V3_Malloc(strlen((char*)envpn) + 1);
if (!tmpstr) {
- PrintError("Cannot allocate temp string\n");
+ PrintError(core->vm_info, core, "Cannot allocate temp string\n");
return -1;
}
var_dump.envp[i] = tmpstr;
/* deepcopy the string */
+ // will always null-terminate tmpstr
strncpy(tmpstr, (char*)envpn, strlen((char*)envpn) + 1);
i++;
cursor += 8;
char * tmpstr = (char*)V3_Malloc(strlen(envstrs[j]) + 1);
if (!tmpstr) {
- PrintError("Cannot allocate temp string\n");
+ PrintError(core->vm_info, core, "Cannot allocate temp string\n");
return -1;
}
-
+ // will always null-terminate tmpstr
strncpy(tmpstr, envstrs[i], strlen(envstrs[j]) + 1);
var_dump.envp[i] = tmpstr;
bytes += strlen(envstrs[j]) + 1;
/* copy out all of the arguments and the environment to the VMM */
if ((bytes_needed = v3_copy_chunk_vmm64(core, argstrs, envstrs, argcnt, envcnt)) == -1) {
- PrintDebug("Error copying out environment and arguments\n");
+ PrintDebug(core->vm_info, core, "Error copying out environment and arguments\n");
return -1;
}
- PrintDebug("environment successfully copied into VMM\n");
+ PrintDebug(core->vm_info, core, "environment successfully copied into VMM\n");
inject_gva = v3_prepare_guest_stack(core, bytes_needed);
if (!inject_gva) {
- PrintDebug("Not enough space on user stack\n");
+ PrintDebug(core->vm_info, core, "Not enough space on user stack\n");
return -1;
}
if (core->cpu_mode == LONG) {
if (v3_inject_strings64(core, argstrs, envstrs, argcnt, envcnt) == -1) {
- PrintDebug("Error injecting strings into environment (64)\n");
+ PrintDebug(core->vm_info, core, "Error injecting strings into environment (64)\n");
return -1;
}
} else {
if (v3_inject_strings32(core, argstrs, envstrs, argcnt, envcnt) == -1) {
- PrintDebug("Error injecting strings into environment (32)\n");
+ PrintDebug(core->vm_info, core, "Error injecting strings into environment (32)\n");
return -1;
}
}