diff --git a/arch/AArch64/AArch64BaseInfo.c b/arch/AArch64/AArch64BaseInfo.c
index 29793da..510813f 100644
--- a/arch/AArch64/AArch64BaseInfo.c
+++ b/arch/AArch64/AArch64BaseInfo.c
@@ -39,7 +39,7 @@
 // return true if s1 == lower(f2), and false otherwise
 static bool compare_lower_str(char *s1, char *s2)
 {
-	char *lower = strdup(s2), *c;
+	char *lower = cs_strdup(s2), *c;
 	for (c = lower; *c; c++)
 		*c = tolower((int) *c);
 
@@ -85,7 +85,7 @@
 
 	if (isNeg) *--BufPtr = '-';   // Add negative sign...
 
-	char *result = strdup(BufPtr);
+	char *result = cs_strdup(BufPtr);
 	return result;
 }
 
diff --git a/arch/AArch64/AArch64GenAsmWriter.inc b/arch/AArch64/AArch64GenAsmWriter.inc
index 2f460c4..fcf9e92 100644
--- a/arch/AArch64/AArch64GenAsmWriter.inc
+++ b/arch/AArch64/AArch64GenAsmWriter.inc
@@ -11308,7 +11308,7 @@
     return false;
   }
 
-  char *tmp = strdup(AsmString), *AsmMnem, *AsmOps;
+  char *tmp = cs_strdup(AsmString), *AsmMnem, *AsmOps;
   AsmMnem = tmp;
   AsmOps = strchr(tmp, ' ');
   if (AsmOps) {
diff --git a/arch/AArch64/AArch64InstPrinter.c b/arch/AArch64/AArch64InstPrinter.c
index 89093f0..6a2a3ed 100644
--- a/arch/AArch64/AArch64InstPrinter.c
+++ b/arch/AArch64/AArch64InstPrinter.c
@@ -567,7 +567,7 @@
 static void printVPRRegister(MCInst *MI, unsigned OpNo, SStream *O)
 {
 	unsigned Reg = MCOperand_getReg(MCInst_getOperand(MI, OpNo));
-	char *Name = strdup(getRegisterName(Reg));
+	char *Name = cs_strdup(getRegisterName(Reg));
 	Name[0] = 'v';
 	SStream_concat(O, "%s", Name);
 	cs_mem_free(Name);
@@ -780,7 +780,7 @@
 		unsigned SubRegIdx = IsVec64 ? AArch64_dsub_0 : AArch64_qsub_0;
 		unsigned I;
 		for (I = 0; I < Count; I++) {
-			char *Name = strdup(getRegisterName(MCRegisterInfo_getSubReg(MRI, Reg, SubRegIdx++)));
+			char *Name = cs_strdup(getRegisterName(MCRegisterInfo_getSubReg(MRI, Reg, SubRegIdx++)));
 			Name[0] = 'v';
 			SStream_concat(O, "%s%s", Name, LayoutStr);
 			if (I != Count - 1)
@@ -788,7 +788,7 @@
 			cs_mem_free(Name);
 		}
 	} else { // Print the register directly when NumVecs is 1.
-		char *Name = strdup(getRegisterName(Reg));
+		char *Name = cs_strdup(getRegisterName(Reg));
 		Name[0] = 'v';
 		SStream_concat(O, "%s%s", Name, LayoutStr);
 		cs_mem_free(Name);
@@ -812,7 +812,7 @@
 void AArch64_printInst(MCInst *MI, SStream *O, void *Info)
 {
 	if (printAliasInstr(MI, O, Info)) {
-		char *mnem = strdup(O->buffer);
+		char *mnem = cs_strdup(O->buffer);
 		char *tab = strchr(mnem, '\t');
 		if (tab) {
 			*tab = '\0';
diff --git a/arch/ARM/ARMGenAsmWriter.inc b/arch/ARM/ARMGenAsmWriter.inc
index e086d10..3005b1c 100644
--- a/arch/ARM/ARMGenAsmWriter.inc
+++ b/arch/ARM/ARMGenAsmWriter.inc
@@ -8694,7 +8694,7 @@
     return false;
   }
 
-  char *tmp = strdup(AsmString), *AsmMnem, *AsmOps;
+  char *tmp = cs_strdup(AsmString), *AsmMnem, *AsmOps;
   AsmMnem = tmp;
   AsmOps = strchr(tmp, ' ');
   if (AsmOps) {
diff --git a/arch/Mips/MipsGenAsmWriter.inc b/arch/Mips/MipsGenAsmWriter.inc
index e23caf7..043123e 100644
--- a/arch/Mips/MipsGenAsmWriter.inc
+++ b/arch/Mips/MipsGenAsmWriter.inc
@@ -4562,7 +4562,7 @@
     return false;
   }
 
-  char *tmp = strdup(AsmString), *AsmMnem, *AsmOps;
+  char *tmp = cs_strdup(AsmString), *AsmMnem, *AsmOps;
   AsmMnem = tmp;
   AsmOps = strchr(tmp, ' ');
   if (AsmOps) {
diff --git a/arch/Mips/MipsInstPrinter.c b/arch/Mips/MipsInstPrinter.c
index 8ed093d..288727e 100644
--- a/arch/Mips/MipsInstPrinter.c
+++ b/arch/Mips/MipsInstPrinter.c
@@ -199,7 +199,7 @@
 		printInstruction(MI, O, NULL);
 	else {
 		// fixup instruction id due to the change in alias instruction
-		char *mnem = strdup(O->buffer);
+		char *mnem = cs_strdup(O->buffer);
 		char *tab = strchr(mnem, '\t');
 		if (tab)
 			*tab = '\0';
diff --git a/arch/PowerPC/PPCGenAsmWriter.inc b/arch/PowerPC/PPCGenAsmWriter.inc
index a6aa96a..c4b20d6 100644
--- a/arch/PowerPC/PPCGenAsmWriter.inc
+++ b/arch/PowerPC/PPCGenAsmWriter.inc
@@ -3456,7 +3456,7 @@
     return false;
   }
 
-  char *tmp = strdup(AsmString), *AsmMnem, *AsmOps;
+  char *tmp = cs_strdup(AsmString), *AsmMnem, *AsmOps;
   AsmMnem = tmp;
   AsmOps = strchr(tmp, ' ');
   if (AsmOps) {
diff --git a/arch/X86/X86ATTInstPrinter.c b/arch/X86/X86ATTInstPrinter.c
index 2c5bbd7..f9613d1 100644
--- a/arch/X86/X86ATTInstPrinter.c
+++ b/arch/X86/X86ATTInstPrinter.c
@@ -447,7 +447,7 @@
 
 	// Try to print any aliases first.
 	if (printAliasInstr(MI, OS)) {
-		char *mnem = strdup(OS->buffer);
+		char *mnem = cs_strdup(OS->buffer);
 		char *tab = strchr(mnem, '\t');
 		if (tab)
 			*tab = '\0';
diff --git a/arch/X86/X86GenAsmWriter.inc b/arch/X86/X86GenAsmWriter.inc
index 20adc60..2470c5a 100644
--- a/arch/X86/X86GenAsmWriter.inc
+++ b/arch/X86/X86GenAsmWriter.inc
@@ -13374,7 +13374,7 @@
     return false;
   }
 
-  char *tmp = strdup(AsmString), *AsmMnem, *AsmOps;
+  char *tmp = cs_strdup(AsmString), *AsmMnem, *AsmOps;
   AsmMnem = tmp;
   AsmOps = strchr(tmp, ' ');
   if (AsmOps) {
diff --git a/arch/X86/X86GenAsmWriter1.inc b/arch/X86/X86GenAsmWriter1.inc
index 70c6893..e822366 100644
--- a/arch/X86/X86GenAsmWriter1.inc
+++ b/arch/X86/X86GenAsmWriter1.inc
@@ -12863,7 +12863,7 @@
     return false;
   }
 
-  char *tmp = strdup(AsmString), *AsmMnem, *AsmOps;
+  char *tmp = cs_strdup(AsmString), *AsmMnem, *AsmOps;
   AsmMnem = tmp;
   AsmOps = strchr(tmp, ' ');
   if (AsmOps) {
diff --git a/arch/X86/X86IntelInstPrinter.c b/arch/X86/X86IntelInstPrinter.c
index 053e2dd..3d09939 100644
--- a/arch/X86/X86IntelInstPrinter.c
+++ b/arch/X86/X86IntelInstPrinter.c
@@ -224,7 +224,7 @@
 	//  O << "\tlock\n";
 
 	if (printAliasInstr(MI, O)) {
-		char *mnem = strdup(O->buffer);
+		char *mnem = cs_strdup(O->buffer);
 		char *tab = strchr(mnem, '\t');
 		if (tab)
 			*tab = '\0';
diff --git a/utils.c b/utils.c
index 87750ce..44f12f2 100644
--- a/utils.c
+++ b/utils.c
@@ -86,3 +86,14 @@
 
 	return c;
 }
+
+char *cs_strdup(const char *str)
+{
+	size_t len = strlen(str)+ 1;
+	void *new = cs_mem_malloc(len);
+
+	if (new == NULL)
+		return NULL;
+
+	return (char *)memmove(new, str, len);
+}
diff --git a/utils.h b/utils.h
index 8df745e..9b36ed9 100644
--- a/utils.h
+++ b/utils.h
@@ -49,5 +49,7 @@
 
 #define ARR_SIZE(a) (sizeof(a)/sizeof(a[0]))
 
+char *cs_strdup(const char *str);
+
 #endif
 
