Zarco took his first top-class win – and his first in grand prix racing since his title-winning 2016 Moto2 campaign – in sensational style, passing a rapidly fading Martin on the 27th and last lap.
Poleman Martin had controlled the race up to that point, but began to struggle in the closing stages having been in a minority of riders to opt for a soft rear tyre.
On the other hand, Zarco had been circulating at the back of a four-rider pack vying for second in fifth place for most of the distance before turning up the wick late on.
He passed points leader Francesco Bagnaia for fourth at the start of lap 22 before repeating the trick on Fabio Di Giannantonio three laps later to grab third, and on lap 26 he made a forceful move at Miller Corner (formerly Honda) on Brad Binder for second.
Martin meanwhile had seen his lead advantage shrink from 2.4s to just four tenths in that time, and by the start of the final lap it was clear he stood very little chance of holding off Zarco, who like the majority was on a medium rear tyre, to the finish.
What felt like an inevitable move for the lead came at Miller Corner, and 33-year-old Frenchman Zarco was able to hang on by two tenths for a long-awaited first premier class win in his 120th attempt.
“It’s hard to believe,” said Zarco in parc ferme. “I was trying to save the rear tyre as well as possible because normally on the last few laps I can handle the tyre well. I was surprised to see Martin dropping down, so I thought something was possible.
“After so many races of trying to do it, it’s a really high emotion. I need to swallow it, take it well and enjoy tonight.”
Bagnaia meanwhile finished second to strengthen his title bid, taking advantage of Zarco forcing Binder wide on the penultimate lap before slicing his way through Di Giannantonio and then picking off the struggling Martin with ease.
Gresini Ducati rider Di Giannantonio, who still doesn’t have a ride for 2024, scored his first MotoGP podium in third, with Binder fourth and Martin limping home in fifth.
With Martin slipping to fifth Bagnaia now takes an enhanced championship lead of 27 points into Sunday’s sprint race.
Some way behind the lead group, Marco Bezzecchi was sixth on the VR46 Ducati, followed by home hero Jack Miller on the second KTM and Aleix Espargaro on the best of the Aprilias.
Two more Ducati riders, Gresini’s Alex Marquez and works man Enea Bastianini, completed the top 10.
Marc Marquez ran as high as fifth early on aboard his Honda, having joined Martin in gambling on the soft rear tyre, but began to plummet down the order and finally finished down in 15th behind the lead Yamaha of Fabio Quartararo.
Marquez’s Honda team-mate Joan Mir and Tech3 GasGas rider Augusto Fernandez both crashed out.