pragma solidity >=0.4.9 <0.6.0; contract test { address owner; function at(address _addr) public returns (bytes memory o_code) { assert(_addr != address(0x0)); assembly { // retrieve the size of the code, this needs assembly let size := extcodesize(_addr) // allocate output byte array - this could also be done without assembly // by using o_code = new bytes(size) o_code := mload(0x40) // new "memory end" including padding mstore(0x40, add(o_code, and(add(add(size, 0x20), 0x1f), not(0x1f)))) // store length in memory mstore(o_code, size) // actually retrieve the code, this needs assembly extcodecopy(_addr, add(o_code, 0x20), 0, size) } } function bla() public { require(tx.origin == owner); msg.sender.send(19); assembly { } } }