ABSTRACTSmart contracts are turing‐complete computer programs running on blockchains. Like traditional programs, smart contracts are also vulnerable. However, unlike traditional programs, it is very difficult to modify smart contracts once they are deployed on the blockchain. Therefore, reducing potential vulnerabilities in contracts before deployment to the blockchain is very important. The existing smart contract detection tools mostly fail to fully consider the complex control flow relationships within smart contracts, leading to false positives and false negatives. To address these problems, we propose FlawCheck, a vulnerability detection tool based on symbolic execution. First, it compiles smart contract source code into bytecode. Then, it disassembles bytecode into an opcode sequence, building the dependencies of contract control flow. Next, it performs preliminary analysis on the information generated during the simulated execution on the Ethereum virtual machine to identify suspicious vulnerability paths. Finally, it detects these suspicious paths by using symbolic execution. We verified that FlawCheck can detect five types of smart contract vulnerabilities. Experimental results on a dataset of 13016 real contracts shows that FlawCheck has higher accuracy than other tools.