I puzzled over this for a few minutes.
Warcraft 1,2 & 3 used swords for attack, shields for stop. It works because the entire theme was medieval. So, swords mean attack, shields mean “stop”. Regardless of unit type (even air units — there’s no cognitive dissonance there).
Starcraft 1 & 2 cleverly abstracted this away though. Swords clearly wouldn’t fit in Starcraft. Different units had different means of attacking. Zerg never use guns. They use spit or claws. Protoss had some “sword-like” units that did hand-to-hand combat (zealots), but other units fired projectiles (dragoons). They used a _crosshair_ instead for the attack symbol.
So, in my own game I had to think, what symbolizes _attack_ in my game? It’s a space combat game, and attack is done primarily via missiles. So I subbed in a picture of a missile for attack. And voila. The right symbol for attack is _a picture of whatever attacking is done with_ in your game.
If it were a streetfighting game, you’d use an icon of a fist.