England face the daunting prospect of playing out spin wizard Muttiah Muralitharan on the final day Thursday to draw the second Test and keep the three-match series alive.
The tourists, trailing Sri Lanka by 197 runs on the first innings, ended the fourth day's play on a wearing Sinhalese Sports Club (SSC) pitch at 48-0 in their second knock on Wednesday.
Alastair Cook was unbeaten on 19 and captain Michael Vaughan was on 28 when play was abandoned for the day 16 overs early due to bad light.
England, who lost the first Test by 88 runs in Kandy last week, must bat out the last day's play to have a chance of forcing a series-levelling win in the final Test at Galle from next Tuesday.
Sri Lanka have won 10 of their last 12 Tests at the SSC with Muralitharan, Test cricket's leading bowler, being the wrecker-in-chief on most occasions.
Earlier, Sri Lanka took their overnight score of 379-4 to 548-9 before captain Mahela Jayawardene, who top-scored with 195, declared the first innings in the final session.
The hosts were reduced to 450-8 after lunch before wicket-keeper Prasanna Jayawardene and Dilhara Fernando put on 98 runs for the ninth wicket to boost the lead.
Prasanna Jayawardene struck a pugnacious 79 with the help of five boundaries before he gloved Steve Harmison to wicket-keeper Matthew Prior and prompted his captain to declare.
Fast bowler Fernando remained unbeaten on 36 as the Sri Lankan tail frustrated England's bowlers, for whom Harmison and Ryan Sidebottom claimed three wickets each.
Left-arm spinner Monty Panesar took 2-151 from 50 overs.
The ninth-wicket pair kept England at bay after the tourists fought back in the morning session with quick wickets.
England, who struggled to take two wickets during the entire third day's play, grabbed three in the space of 26 runs on Wednesday morning.
Mahela Jayawardene, on 167 overnight, fell five runs short of his fourth double hundred in 20 three-figure knocks. He hit 16 boundaries and a six.
Sri Lanka added 20 runs to their overnight total when Jehan Mubarak fended at a short ball from Harmison and gave Ian Bell an easy catch at gully.
Mubarak, under pressure to hold his place in the Test side, made nine.
Mahela Jayawardene, who came in to bat on Monday afternoon with Sri Lanka struggling on 22-2, was sixth out at the total of 420 after he top-edged a sweep off Panesar to Paul Collingwood at first slip.
The skipper is Sri Lanka's highest run-getter with 7,058 from 92 Tests after racing past the retired Sanath Jayasuriya's previous record of 6,973 runs on Tuesday.
Paceman Stuart Broad picked up his first Test wicket when he bounced Chaminda Vaas, but the left-hander's attempted hook shot deflected to Bell in the slips.
Panesar picked up Lasith Malinga after lunch before Prasanna Jayawardene and Fernando increased the home team's lead.